<位元长度> ’ <b、o、d、h> <数值>
EX:
a = 32'd0;
b = 6'b000101;
c = 8'h0A;
d = 8'b0101_1010;
错误用法举例:
a = 32'b0;//打了b就要把所有位打出来
b = 6'd000101;//数值使用错误
c = 8'h10A;//位元长度错误
EX:
reg [7:0]a;//一个8bit的reg
reg [3:0]b[31:0];//32个4bit的reg--->又称记忆体表示法
EX:用向量表示法写一个有读写及致能的简易 memory
module memory(
Enable,
ReadWrite,
Address,
DataIn,
DataOut
);
/*----------ports declarations----------*/
input Enable;
input ReadWrite;
input [5:0]Address;
input [3:0]DataIn;
output [3:0]DataOut;
reg [3:0]DataOut;
/*----------variables----------*/
reg [3:0]mem[63:0];
/*----------memory----------*/
always@(Enable or ReadWrite)begin
if(Enable)begin
if(ReadWrite)DataOut = mem[Address];
else mem[Address] = DataIn;
end
else DataOut = 4'bzzzz;
end
endmodule
TestBench
`timescale 1ns/1ns
module tb_memory();
/*----------variables----------*/
reg Enable;
reg ReadWrite;
reg [5:0]Address;
reg [3:0]DataIn;
wire[3:0]DataOut;
integer i = 0;
/*----------module memory instantiation----------*/
memory UUT(
.Enable(Enable),
.ReadWrite(ReadWrite),
.Address(Address),
.DataIn(DataIn),
.DataOut(DataOut)
);
/*----------control signal----------*/
initial begin
Enable = 1'b0;
ReadWrite = 1'b0;
Address = 6'd0;
DataIn = 4'd0;
end
initial begin
for(i=0;i<=63;i=i+1)begin
#100;
Enable = 1'b1;
ReadWrite = 1'b0;
Address = Address + 6'd1;
DataIn = DataIn + 4'd1;
#10;
Enable = 1'b0;
end
Address = 6'd0;
for(i=0;i<=63;i=i+1)begin
#100;
Enable = 1'b1;
ReadWrite = 1'b1;
Address = Address + 6'd1;
DataIn = 4'dz;
#10;
Enable = 1'b0;
end
#1000;
$stop;
end
always@(negedge Enable)begin
if(ReadWrite)$display("time = %3d, dataRead = %x", $time, DataOut);
end
endmodule
Wave
这边可以看到前面是写入值到各个位址,下图则是成功从该位址读出先前存入的值。
(这边 ReadWrite 是 "0" 写入,"1" 读取)
有趣的是 quartus 竟然可以辨识那是一颗 mem !
在这里可以顺便提到 integer 的使用,integer 好比一个 32bit 的 register (但 integer 视为有符号数 ),所以不要轻易用它来宣告变数,否则会无形中多使用了很多硬体资源,它通常会被宣告来当 for-loop 的回圈变数。
EX:
reg [3:0]a[31:0];
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
for(i=0;i<32;i=i+1)begin
a <= 4'd0;
end
end
else begin
.
.
.
end
end
无法更动的常数
资料位宽(Width)
或是状态机的状态值
EX:
parameter width = 32;
reg [width-1:0]a;//一个32bit的reg
>>: Day 7. 介绍一下VSCode-打code好帮手
前言 看了一些交易资料,现在来看看一些帐务相关的资料吧。 参考网站:Position 本日程序码使用...
前言 昨天我们写好了测试的 model,今天就来用他实作吧。 test_main 我们先从最简单的 ...
** 请把这个写在最外层 让网页准备好! $(document).ready(function(){...
同步发表到驴形笔记 前情题要 在上这一篇中我们成功让webpack可以吃下".ts&qu...
前言 今天会完成 user_bp,也就是要完成看贴文跟留言的部分。 /posts 首先来看看可以看到...