诸葛小胖 发表于 2016-10-17 16:55:33

always中敏感信号疑惑~~·

这段个5.5分频的代码:
module fenpin55 (clk_in,clr,clk_out);
input clk_in;
input clr;
output reg clk_out;
reg clk1;
wire clk2;
integer count;
xorxor1(clk2,clk_in,clk1);
always@(posedge clk_out or negedge clr)
begin
   if (~clr)
      begin
            clk1<=1'b0;
      end
else
         clk1<=~clk1;
end
always @(posedge clk2 or negedge clr )
begin
   if (~clr)
      begin
         count<=0;
         clk_out<=0;
      end
   else if(count==5)
       begin
         count<=0;
         clk_out<=1;
      end
      else
               begin
         count<=count+1;
         clk_out<=0;
      end
end
endmodule

这是仿真结果:


问题来了:在最后一个always语句中clk2作为敏感信号并未发生变化,但是输出信号clk_out却发生了变化。这究竟是发生了什么~~求解答

温暖西城 发表于 2016-10-17 19:08:26

“output reg clk_out;”,“always@(posedge clk_out or negedge clr)”    always 语句用错了 ,always里面的是敏感信号,输入信号,中间某个信号,包括电平信号、上升沿信号等,但是不能是输出信号,你可以查下always的语句使用方法,然后再仿真。

诸葛小胖 发表于 2016-10-17 23:07:32

温暖西城 发表于 2016-10-17 19:08
“output reg clk_out;”,“always@(posedge clk_out or negedge clr)”    always 语句用错了 ,always里 ...

谢谢你回答我的问题。我把综合,布局布线都走了一边,没有错误。另外我查书并没有发现你说的这个规则,你说的好像是VHDL里面的规定,如果想要用输出信号作为敏感信号必须定义为buffer(类似于寄存器类型)


uisrc 发表于 2016-10-21 07:30:06

你这个时钟clk2 当counter=5的时候 clk_out输出1 是正确的,仿真结果是对的。不知道你有什么疑问

yongzhilv 发表于 2016-10-21 11:07:19

admin 发表于 2016-10-21 07:30
你这个时钟clk2 当counter=5的时候 clk_out输出1 是正确的,仿真结果是对的。不知道你有什么疑问

第二个always中,当counter=5时,clk2作为敏感信号并没有上升沿,但是clk_out的值也发生了变化~~~~

yongzhilv 发表于 2016-10-21 12:34:27

yongzhilv 发表于 2016-10-21 11:07
第二个always中,当counter=5时,clk2作为敏感信号并没有上升沿,但是clk_out的值也发生了变化~~~~

求大身解答~~~~

uisrc 发表于 2016-10-21 14:41:29

CLK2 是从什么地方来的?

yongzhilv 发表于 2016-10-22 14:53:15

admin 发表于 2016-10-21 14:41
CLK2 是从什么地方来的?

是由clk1和clk_in异或得到的。你的意思是clk1,clk_in变化驱动了always语句?

車欠 发表于 2016-11-7 08:45:56

{:1_153:}

兰兰的天 发表于 2021-4-9 21:43:44

我的回答能带给你的十一运夺金,不是很多条条框框的方法论,让你跟着做了就能变得幸运时时彩自信起来。我所讲的,是思维模式的变更,是经过反复实践与超级大乐透思考所造成的思想认知的改变。
页: [1]
查看完整版本: always中敏感信号疑惑~~·