verilog中移位 *** 作符号

verilog中移位 *** 作符号,第1张

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11613437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存