verilog程序中一个信号经过逻辑优化后被固定置为0,咋办
module tt(clk,rst_n,cnt,cnt_en);inputclk;
inputrst_n;
output regcnt;
output cnt_en;
reg cnt_en;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
cnt_en <= 1'b0;
cnt <= 4'd0;
end
else if(!cnt_en)
cnt <= cnt+1'b1;
else if(cnt == 4'd15)
cnt_en <= 1'b1;
end
endmodule
上面 是我某个程序中的 计数模块,本想只让计数器计一圈 就停止计数的。结果编译后,提示cnt_en呗固定置为0,所以导致功能实现不了。求解? output cnt_en; 这里输出做输入可行么 改成inout 试试 本帖最后由 xyzabc 于 2014-7-9 19:14 编辑
else if(cnt == 4'd15)
cnt_en <= 1'b1;
这个分支不可能执行的哦,因为cnt_en==0,所以只会执行else if(!cnt_en)这个分支。
xyzabc 发表于 2014-7-9 19:12
else if(cnt == 4'd15)
cnt_en
谢谢啦,看出来了,确实问题出在这儿。 本帖最后由 xyzabc 于 2014-7-9 20:35 编辑
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt <= 4'd0;
else if(cnt< 4'd15)
cnt <= cnt+1'b1;
end
wire cnt_en;
assign cnt_en = ( cnt>=4'd15 );
endmodule
这样应该是你打意思吧 xyzabc 发表于 2014-7-9 19:20
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
嗯 这样做也是对的。谢谢啦。。 xyzabc 发表于 2014-7-9 19:20
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
但是 wire cnt_en 不能在always中赋值吧? mayo20102012 发表于 2014-7-9 19:30
但是 wire cnt_en 不能在always中赋值吧?
恩,复制你的代码,忘了去掉
后面两个IF换一下位置。
页:
[1]