modelsim不全认可verilog语法的事吗
时间:10-02
整理:3721RD
点击:
这是一个booth乘法器!
程序如下:
`timescale 1ns/1ns
module ceshi1(a,b,c);
input[3:0] a;
input[3:0] b;
output [7:0] c;
reg[8:0] q;
reg[7:0] c;
integer i;
always @ (a,b)
begin
q={4'b0000,b,1'b0};
for(i=4;i>=0;i=i-1)
if(i==0)c=q[8:1];
else
begin
case(q[1:0])
2'b01:q[8:5]<=q[8:5]+a[3:0];
2'b10:q[8:5]<=q[8:5]-a[3:0];
default: q<=q;
endcase
#2q<={q[8],q[8:1]};
#2 $display("q=%b,i=%d,c=%b",q,i,c); //************若不要此句,结果错误!
end
end
endmodule
这个$display在里面只起到显示结果的作用吧,可有可无,但是为什么么没有就不行呢!
而且在我用红色标出的begin —end里面。语句应该是顺序执行的,但是没有延迟就不是顺序执行!
我是在modelsi中运行的!
敬请高手赐教!
程序如下:
`timescale 1ns/1ns
module ceshi1(a,b,c);
input[3:0] a;
input[3:0] b;
output [7:0] c;
reg[8:0] q;
reg[7:0] c;
integer i;
always @ (a,b)
begin
q={4'b0000,b,1'b0};
for(i=4;i>=0;i=i-1)
if(i==0)c=q[8:1];
else
begin
case(q[1:0])
2'b01:q[8:5]<=q[8:5]+a[3:0];
2'b10:q[8:5]<=q[8:5]-a[3:0];
default: q<=q;
endcase
#2q<={q[8],q[8:1]};
#2 $display("q=%b,i=%d,c=%b",q,i,c); //************若不要此句,结果错误!
end
end
endmodule
这个$display在里面只起到显示结果的作用吧,可有可无,但是为什么么没有就不行呢!
而且在我用红色标出的begin —end里面。语句应该是顺序执行的,但是没有延迟就不是顺序执行!
我是在modelsi中运行的!
敬请高手赐教!
调试这个程序化了我整整一天的时间,现在虽然好了,但是不能在ise中综合!
而且对于其中的疑惑人未能揭开,摆脱各位!
新手吧
估计老兄是新手吧。建议看看什么是可综合设计、什么是时序逻辑、组合逻辑。booth算法理解起来还是有点难度的,老兄还是先把简单的东西搞清楚了后再来搞这个booth乘法器。
好像q被赋值了两次,但在逻辑综合时,只有最后的赋值才执行,因此case语句不起作用。逻辑模拟不一样。
小弟的确是新手!
看了些关于科综合的条件以及阻塞于非阻塞的区别,把程序中所有的《=改为=后,问题顺利解决!多谢各位!
不过理解还不是很透!
只能继续努力,希望得到各位的指教!
modelsim只有查不出来的语法错误,还有不认识的正确语法么?