vvt 发表于 2010-6-23 09:45:17

verilog 分频问题

verilog 分频问题


module fre_8(clk,reset,dout);
//
input clk,reset;
output dout;
reg dout;
reg counter;
//
always @(posedge clk)
    begin
   if(reset)                  //高电平复位
      counter="0000";
   else
      counter=counter+1;      //加计数
   if(counter=="1000")
      dout=0;
   else dout=1;
    end
endmodule

vvt 发表于 2010-6-23 09:45:49

增加一个dout_r寄存器
module fre_8(clk,reset,dout);
//
input clk,reset;
output dout;
reg dout_r;                      //jicunqi
reg counter;
//
assign dout=dout_r;                //
always @(posedge clk)
    begin
    if(reset)                  //高电平复位
      counter="0000";
    else
      counter=counter+4'b1;      //加计数
    if(counter=="1000")
      dout_r=1;
    else dout_r=0;
    end

vvt 发表于 2010-6-23 09:46:13

我的理解是这里有问题
counter=counter+1;      //加计数
    if(counter=="1000")
      dout=0;
    else dout=1;
counter==1000时,dout=0,counter还要从1000加到1111,回到0000,再加到1000.
所以,
if(counter=="1000")
      dout=0;
      counter=4'b0000

vvt 发表于 2010-6-23 09:47:45

直接对dout取反就可以了,楼主的如此编程出现这样结果并不奇怪

vvt 发表于 2010-6-23 09:47:59

module fre_8(clk,reset,dout);
//
input clk,reset;
output dout;
reg dout;
reg counter;
//
always @(posedge clk)
    begin
   if(reset)                  //高电平复位
      counter="0000";
   else
      counter=counter+1;      //加计数
   if(counter=="1000")
      dout=~dout;
    end
endmodule

Sunlife 发表于 2015-5-28 14:10:29


直接对dout取反就可以了,楼主的如此编程出现这样结果并不奇怪
页: [1]
查看完整版本: verilog 分频问题