关于verilog的延时赋值,求教高手!!!
`timescale1ns/100psmoduleshady121202(r24,r14,p,clk,timer,bas,nrst,lamp);inputr24,r14,...
`timescale 1ns/100ps
module shady121202(r24,r14,p,clk,timer,bas,nrst,lamp);
input r24,r14,p,clk,nrst,bas;
output[11:0]timer;
output lamp;
reg[11:0] timer;
reg[2:0] cs,ns;
reg lamp;
reg count;
wire i;
reg j;
assign i=r24|r14|p|count;
parameter[2:0] s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b100;
always(posedge i)begin
j<=#10 i;
end
always@(posedge i,negedge nrst)begin
if(!nrst) cs=s1;
else cs<=ns;
end
always@(cs,r24,r14,p,count)
case(cs)
s0:begin
if(r24|count) ns=s1;
else if(r14) ns=s2;
else if(p) ns=s3;
else ns=s0;
end
s1:begin
if(r24) ns=s0;
else ns=s1;
end
s2:begin
if(r14) ns=s0;
else ns=s2;
end
s3:begin
if(p) ns=s0;
else ns=s3;
end
default:begin
ns=s1;
end
endcase
......
我想把i的值延迟10ns后赋给j,不知道哪里错了,请高手指点。谢谢了! 展开
module shady121202(r24,r14,p,clk,timer,bas,nrst,lamp);
input r24,r14,p,clk,nrst,bas;
output[11:0]timer;
output lamp;
reg[11:0] timer;
reg[2:0] cs,ns;
reg lamp;
reg count;
wire i;
reg j;
assign i=r24|r14|p|count;
parameter[2:0] s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b100;
always(posedge i)begin
j<=#10 i;
end
always@(posedge i,negedge nrst)begin
if(!nrst) cs=s1;
else cs<=ns;
end
always@(cs,r24,r14,p,count)
case(cs)
s0:begin
if(r24|count) ns=s1;
else if(r14) ns=s2;
else if(p) ns=s3;
else ns=s0;
end
s1:begin
if(r24) ns=s0;
else ns=s1;
end
s2:begin
if(r14) ns=s0;
else ns=s2;
end
s3:begin
if(p) ns=s0;
else ns=s3;
end
default:begin
ns=s1;
end
endcase
......
我想把i的值延迟10ns后赋给j,不知道哪里错了,请高手指点。谢谢了! 展开
展开全部
什么错了?是综合编译错了吗?延时是行为描述,是不可综合的
更多追问追答
追问
仿真的时候,j和i一致,没有延时10ns的状态。另外,有什么可以综合的方法么?谢谢了!
追答
真是很奇怪的写法,i作为时钟信号。
首先,你的i上升沿到达,再把i赋值给j,这种做法本身就存在问题,这个时候是应该赋值0还是1呢?所以你想延迟10ns赋值。我想这就是你的初衷吧。但即使是延迟了,这个问题还是存在呀,只是处理的时间延后了而已
其次,在你的代码中,clk信号一直都没用,是你写错了,还是你就是这么设计的呢?如果你把clk作为时钟去替代i做时钟试试会有什么变化。
再次,你的coding style实在是不好,i,j一般都是作为integer定义的。遵循常规的定义习惯,对阅读是有很大帮助的,毕竟你写的东西也要方便别人看,而不仅仅是自己看。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询