#学习记录#
1 verilog中~和!的区别
- !表示逻辑取反,~表示按位取反。
- 当面对位宽为1时,两个操作符的作用相同。
- 当位宽不为1时:
~会将变量的各个位依次取反:a[2:0]={1,1,0},~a={0,0,1}。
!会将变量作为一个值去处理:a[2:0]={1,1,0},a=6,!a=0; a[2:0]={0,0,0},!a=1。
2 verilog中的复制拼接
a=2'h4,b=2'h5将a,b拼接起来{a,b}=4'h45。如果要将a,b重复拼接32次,需要用到复制拼接,如下所示:
c={32{a,b}};
//等效于
c={{a,b},{a,b},{a,b}...{a,b}};
便于代码维护,定义一个parameter,如下所示:
parameter COPY_NUM = 'd32;
c={COPY_NUM{a,b}};
这里的复制次数必须为常量,不可以为变量。
3 verilog参数例化
- 参数定义parameter,如下所示:
module print#(parameter TIMES =32)
(input clk,input rst_n,output reg print_out
);
- 参数例化
ram #(.width(16),.depth(4)
)
ram_test(.clk(clk),.rst(rst)
);
在模块例化时可以使用参数传递如上所示。
_______________________________________________________________________
会持续更新...