Quartus II中使用Verilog,不同位宽赋值,怎样不出现warning?
本帖最后由 reaction100 于 2013-2-16 11:14 编辑在Quartus II 中使用Verilog 模块:
module decodeHEX2BCD
(
input a,
output reg q1,//十位
output reg q0 //个位
);
always @(*)
begin
q1 = a / 4'd10;
q0 = a % 4'd10;
end
endmodule
由于q1、q0是4位的,赋值语句右侧的结果是8位的,因此编译之后就会有两个warning:
虽然不影响使用,但是总不好看。
请问有什么方法可以去除warning么? 这模块理论上是不工作的,只能用于仿真。综合器是不会综合乘除法的。 本帖最后由 reaction100 于 2013-2-16 11:13 编辑
wye11083 发表于 2013-2-16 10:46 static/image/common/back.gif
这模块理论上是不工作的,只能用于仿真。综合器是不会综合乘除法的。
不是吧,这个可以综合的。我在开发板上试过。
用数码管显示一个2位数,其中有一个模块就是上面那个。
也许是Quartus的综合能力较强?
========
关键问题不是这个,除法换成其他语句(比如加法)也行。
我是想问,不同位宽的赋值,怎样不出现warning? reg temp1;
reg temp0;
always @(*)
begin
temp1<= a / 4'd10;
temp0<= a % 4'd10;
end
always @(*)
begin
q1<= temp1;
q0<= temp0;
end
这样试下呢
wangwenjia 发表于 2013-2-16 11:18 static/image/common/back.gif
reg temp1;
reg temp0;
这个方法可以,已经没有warning了。
非常感谢。 我的代码也经常出现这个问题,但是没想到去解决它,楼主细心! 问题是虽然解决了问题,但却多占用了两个寄存器资源。 本帖最后由 reaction100 于 2013-2-16 15:51 编辑
hughqfb 发表于 2013-2-16 12:18 static/image/common/back.gif
我的代码也经常出现这个问题,但是没想到去解决它,楼主细心! 问题是虽然解决了问题,但却多占用了两个寄 ...
temp0和temp1不需要多用寄存器,编译之后的报告显示使用的资源和原先一样。
4楼的写法中:
always @(*)
begin
q1<= temp1;
q0<= temp0;
end
always @(*)的写法是组合逻辑,不是时序逻辑。
两个“<=”改为“=”更合适。 reaction100 发表于 2013-2-16 15:22 static/image/common/back.gif
temp0和temp1不需要多用寄存器,编译之后的报告显示使用的资源和原先一样。
4楼的写法中:
不能说是寄存器,应该是暂存器,呵呵。为什么“<="改为“=”合适呢?非阻塞赋值是在always(*)结束时才把值赋给左边的寄存器的。
我最近在用FPGA做毕业设计,希望多多交流!我的QQ:914166312 本帖最后由 reaction100 于 2013-2-17 20:38 编辑
hughqfb 发表于 2013-2-16 20:36 static/image/common/back.gif
不能说是寄存器,应该是暂存器,呵呵。为什么“
那啥,课本上说的……组合逻辑用“=”,时序逻辑用“<=”。
具体为啥我也说不上来,我也是新手
页:
[1]