verilog中移位 *** 作符号有2种,分别是“<<”左移位运算符和“>>”右移位运算符。
格式如下:a<<n,a>>n。其中,a代表要移位的 *** 作数,n代表要移几位。两种运算方式都用0来填补移出的空位。
移位 *** 作符对左边的 *** 作数进行向左或向右的位移位 *** 作,第二个 *** 作数,移位位数是无符号数,遵循的 *** 作规律是“左移时先补后移,右移时先移后补”。
在进行移位运算时,应当注意移位前后变量的位数。如果 *** 作数已经定义了位宽,则进行移位后 *** 作数改变,但是其位宽不变。
扩展资料
verilog HDL运算符
1、逻辑运算符:&&逻辑与;||逻辑或;!逻辑非。
2、关系运算符:<小于、>大于、<=小于等于、>=大于等于。
3、等式运算符:==等于、!=不等于、===等于、!==不等于。
4、移位运算符:<<左移位、>>右移位。
5、位拼接运算符:{a1,a2,a3.......}
6、缩减运算符:先将 *** 作数的第一位与第二位进行与、或、非运算,然后将结果与第三位进行与、或、非运算,依次类推,直至最后一位。
参考资料来源:《Verilog数字系统设计教程 【第3版】》 夏宇闻 编著 北京航空航天出版社
第4章 运算符、赋值语句和结构说明语句 4.4 移位运算符
参考资料来源:百度百科--Verilog HDL
shiftleft模块实现的是将输入左移shamt位,然后输出的功能,其中shamt在该模块中的默认值为2
Shift模块则是调用了shiftleft,在不同的例化方案中重定义shamt的值,以达到不同的数据移位。最后的assign语句中,对结果进行了选择输出。
加一个异步复位输入的rst_n吧。模块输入加input rst_n:
module (clk_in, rst_n)
input rst_n
然后每个 always @ (posedge clk_in)的地方改为:
always @ (posedge clk_in or negedge rst_n)
if(!rst_n) begin
xxx_reg <= 'h0
end else begin
//这里填上你原来对于寄存器的赋值语句
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)