verilog - 左移直到 MSB 为 1:超出循环计数限制。条件永远不会是假的
问题描述
我试图将“移位寄存器”向左移动,直到它的 MSB 为 1。但我的代码不起作用。
编译器说
超出循环计数限制。条件永远不会是假的
input wire [31:0] targetnumber,
...
reg [31:0] shifted;
...
shifted=targetnumber;
for(cnt = 0; shifted[31] == 0; shifted = shifted << 1)begin
cnt = cnt + 1;
end
所以问题是for循环,如果我这样做左移,我100%肯定我的移位寄存器的MSB可以达到1。但是编译器说NOPE bitch。
我试过shifted[31] != 0;
了,它没有出错,但这并没有达到我想要的结果。
解决方案
鉴于并非所有信号之间的依赖关系都得到解释/详细说明,我不确定我是否完全理解您的代码,但也许下面粘贴的代码摘录会对您有所帮助。
for(cnt = 0; cnt < 31; cnt = cnt + 1)begin
if (targetnumber[i])
shift_index = 31 - cnt;
cnt = cnt + 1;
end
assign shifted = targetnumber << shift_index;
推荐阅读
- c++ - c++:这个转换与 & 一起使用是什么?
- api - DocuSign Postman - 提供的访问令牌已过期、被撤销或格式错误
- javascript - JS 不等待等待
- c++ - ntdll.dll XX.exe: 0xC0000139: 未找到入口点
- python - 参数中的Python binance非法字符
- linux - 来自管道和 wc -m 的 bash 脚本输入
- pdf - PDF 未在 GitHub 上正确显示
- node.js - Implementing load protection for Fastify Node js
- dax - Power BI如何根据当前材料计算
- cors - 在 NestJs 中是否可以为单个路由启用 CORS?