搜索
bottom↓
回复: 19

VHDL设计分频器,为什么不用复位端?

[复制链接]

出0入0汤圆

发表于 2013-11-11 00:25:52 | 显示全部楼层 |阅读模式
用VHDL设计了一个分频器,程序如下:
-- CLK100K.vhd

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CLK100K IS
PORT(CLK     : IN STD_LOGIC;  
     --RESET   : IN STD_LOGIC;  
     CLKOUT  : OUT STD_LOGIC);
END CLK100K;

ARCHITECTURE BEHAV OF CLK100K IS

SIGNAL count : INTEGER RANGE 0 TO 256;
SIGNAL clk_data : std_logic := '0';

BEGIN
PROCESS(CLK)
BEGIN
    IF(CLK'EVENT AND CLK='1') THEN
        --IF(RESET = '0') THEN             --这里先去掉复位
            --count <= 0;
            --clk_data <= '0';
       -- ELSE
            IF(count = 255) THEN         
                count <= 0;   
                clk_data <= NOT clk_data;
            ELSE
                clk_data <= clk_data;
                count <= count + 1;
            END IF;
        --END IF;
   END IF;
   CLKOUT <= clk_data;
END PROCESS;

END BEHAV;



先去掉复位部分,这样做前方真是可以,正确的,但是综合后仿真就输出就是红色的一根线了。加上复位,则综合后仿真输出有波形。看网上大多数的分频器都没有加复位,一定能行吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-11-11 01:04:50 | 显示全部楼层
没必要啊!

出0入0汤圆

 楼主| 发表于 2013-11-11 09:35:12 | 显示全部楼层
王的秋天 发表于 2013-11-11 01:04
没必要啊!

如果没复位,综合后仿真不行啊

出0入0汤圆

发表于 2013-11-11 10:35:26 | 显示全部楼层
后仿真不行,是因为count 和clk_data没有赋初值,你可以在声明这两个变量时,给个初始值,那后仿真就对了,而且就不用复位也是可以的。

出0入0汤圆

 楼主| 发表于 2013-11-11 14:34:15 | 显示全部楼层
tangkuan660 发表于 2013-11-11 10:35
后仿真不行,是因为count 和clk_data没有赋初值,你可以在声明这两个变量时,给个初始值,那后仿真就对了, ...

SIGNAL count : INTEGER RANGE 0 TO 256 := 0;
SIGNAL clk_data : std_logic := '0';

这样试也不行哦。是不是综合工具有问提。看到被人很多程序都没有复位的,而我的却要。

出0入0汤圆

发表于 2013-11-11 16:37:13 | 显示全部楼层
kandy286 发表于 2013-11-11 09:35
如果没复位,综合后仿真不行啊

我也有做过分频,我没有用复位端的

出0入0汤圆

发表于 2013-11-11 16:45:58 | 显示全部楼层
module tfour(clk,clk1);
       
input clk;

output clk1;

parameter count_time=24;

integer time1;

reg clk1;

always@(posedge clk)

begin
       
        time1=time1+1;
       
        if(time1<=count_time/2)
       
                begin
               
                clk1=0;
               
                end
               
        else if(time1>count_time/2)
       
                begin
               
                clk1=1;
               
                if(time1==count_time)
               
                time1=0;
               
                end
        end
endmodule
这是用verilog 写的分频,楼主可以看一下,两种语言差不多的,我看楼主你的程序里面没有对count进行累加运算,怎么可能计算分频。思路应该是clk信号的每个脉冲上来,计数,然后当达到要分频的1/2时对count
进行清零。

出0入0汤圆

 楼主| 发表于 2013-11-11 16:57:02 | 显示全部楼层
王的秋天 发表于 2013-11-11 16:45
module tfour(clk,clk1);
       
input clk;

IF(count = 255) THEN         
                count <= 0;   
                clk_data <= NOT clk_data;
            ELSE
                clk_data <= clk_data;
                count <= count + 1;
有的,有计数器的

出0入0汤圆

发表于 2013-11-11 17:05:25 | 显示全部楼层
kandy286 发表于 2013-11-11 16:57
IF(count = 255) THEN         
                count

我仿真了你的程序,没有错啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-11-11 17:06:36 | 显示全部楼层
王的秋天 发表于 2013-11-11 17:05
我仿真了你的程序,没有错啊

上面没有复位端,另外这个250的值太大了,如果end time选的太小了,就看不了全部的波形了

出0入0汤圆

 楼主| 发表于 2013-11-11 18:17:47 | 显示全部楼层
王的秋天 发表于 2013-11-11 17:06
上面没有复位端,另外这个250的值太大了,如果end time选的太小了,就看不了全部的波形了 ...

你是直接仿真的还是综合后再仿真?

出0入0汤圆

发表于 2013-11-11 19:29:43 | 显示全部楼层
kandy286 发表于 2013-11-11 18:17
你是直接仿真的还是综合后再仿真?

直接仿真的了,综合后应该也一样的,里面又没有不可综合语句

出0入0汤圆

 楼主| 发表于 2013-11-11 21:43:34 | 显示全部楼层
王的秋天 发表于 2013-11-11 19:29
直接仿真的了,综合后应该也一样的,里面又没有不可综合语句

我用这个就是前方真可以,综合后就不行了。。

出0入0汤圆

发表于 2013-11-11 21:52:35 | 显示全部楼层
kandy286 发表于 2013-11-11 21:43
我用这个就是前方真可以,综合后就不行了。。

我综合后再仿真,波形也很漂亮啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-11-11 23:00:27 | 显示全部楼层
王的秋天 发表于 2013-11-11 21:52
我综合后再仿真,波形也很漂亮啊

我综合的结果是这样的。用的是synthesis综合工具。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-11-11 23:08:57 | 显示全部楼层
kandy286 发表于 2013-11-11 23:00
我综合的结果是这样的。用的是synthesis综合工具。

你时钟周期多少,end time 多少

出0入0汤圆

 楼主| 发表于 2013-11-12 09:50:40 | 显示全部楼层
王的秋天 发表于 2013-11-11 23:08
你时钟周期多少,end time 多少

跟这个没多大关系,我用的是50ns时钟, END TIME是50000 NS。

出0入0汤圆

发表于 2013-11-12 12:14:53 | 显示全部楼层
kandy286 发表于 2013-11-12 09:50
跟这个没多大关系,我用的是50ns时钟, END TIME是50000 NS。

呃……这个我就不知道了,不好意思,不过觉得不是程序问题的啦

出0入0汤圆

 楼主| 发表于 2013-11-12 19:30:53 | 显示全部楼层
王的秋天 发表于 2013-11-12 12:14
呃……这个我就不知道了,不好意思,不过觉得不是程序问题的啦

哈哈,谢谢,我再研究一下。

出0入0汤圆

发表于 2014-1-22 21:28:43 | 显示全部楼层
kandy286 发表于 2013-11-12 19:30
哈哈,谢谢,我再研究一下。

刚开始用modelsim仿真也碰到了类似的问题。好像没有复位信号的话,需把VHDL中定义的信号赋初值就可以了。但如果是QUARTUS中的波形仿真就不用给信号赋初值。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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