集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2996|回复: 5

verilog 分频问题

[复制链接]
vvt 发表于 2010-6-23 09:45:17 | 显示全部楼层 |阅读模式
verilog 分频问题


module fre_8(clk,reset,dout);
//
input clk,reset;
output dout;
reg dout;
reg[3:0] 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[3:0] 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[3:0] 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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 17:36 , Processed in 0.069442 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表