查看: 6303|回复: 14

有关分频器的问题,同样的程序却是异样的结果

[复制链接]
  • TA的每日心情
    奋斗
    2015-5-12 13:40
  • 签到天数: 154 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-6-6 21:46:06 | 显示全部楼层 |阅读模式
    分享到:
    5与非币
    我设计的是九分频的分频器,占空比为50%,在quartus 6.9编译和仿真都能得到结果,但是在modelsim SE 10.1c中却得到这样的

    如果哪位能解释下这种情况和就我的程序给点意见,那就先谢谢了!

    这是源代码:
    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.All;
    ENTITY divider IS
    PORT( clkin   :  IN  STD_LOGIC;  --输入信号
          clkout  :  OUT STD_LOGIC  --输出信号
        );
    END divider ;

    ARCHITECTURE behv OF divider IS
    SIGNAL temp: INTEGER RANGE 0 TO 8;
    BEGIN
           PROCESS(clkin)
           BEGIN
                  IF clkin'EVENT AND clkin = '1' THEN
                         IF temp = 8 THEN
                                temp<= 0;
                         ELSE
                                temp<= temp + 1;
                         END IF;
                  END IF;         
           END PROCESS;

           PROCESS(temp)
           BEGIN
                  IF temp < 4 THEN
                         IF clkin = '0' THEN
                                clkout<= '0' ;
                         END IF;
                  ELSIF clkin'EVENT AND clkin = '1' THEN
                         clkout<= '1';
                  END IF;

           ENDPROCESS;
    END ARCHITECTURE;  

    最佳答案

    查看完整内容

    1. 把 PROCESS(temp) 改为 PROCESS(temp,clkin) 看看 ! 2. IF temp < 4 THEN IF clkin = '0' THEN clkout
    回复

    使用道具 举报

    该用户从未签到

    发表于 2014-6-6 21:46:07 | 显示全部楼层
    jie1095 发表于 2014-6-11 17:15
    我是直接用modelsim编写仿真的

    1.      把   PROCESS(temp)  改为  PROCESS(temp,clkin) 看看 !

    2.               IF temp < 4 THEN
                         IF clkin = '0' THEN
                                clkout<= '0' ;
                         END IF;
                  ELSIF clkin'EVENT AND clkin = '1' THEN
                         clkout<= '1';
                  END IF;
           这一段写法很怪 , 虽然可以模拟 , 但是可能无法综合出硬体线路 !
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-5-12 13:40
  • 签到天数: 154 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-6-6 21:47:46 | 显示全部楼层
    另外加上仿真结果图片如下
    forum.jpg
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-11-30 10:07
  • 签到天数: 170 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-6-6 23:18:14 | 显示全部楼层
    很相看看Q2 6.9长什么样子?另外,VHDL的我不知道,仿真得写testbench吧
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-5-12 13:40
  • 签到天数: 154 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-6-7 11:53:19 | 显示全部楼层
    de6ian 发表于 2014-6-6 23:18
    很相看看Q2 6.9长什么样子?另外,VHDL的我不知道,仿真得写testbench吧

    Q2 6.9跟现在的最新版界面差不多,不过老版本可以仿真,新版本需要借助用modelsim仿真
    回复

    使用道具 举报

  • TA的每日心情

    2021-12-24 16:56
  • 签到天数: 739 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-6-8 16:43:56 | 显示全部楼层
    本帖最后由 zxq6 于 2014-6-8 16:53 编辑

    1.干嘛不用新版本的QII呢?
    2.vhdl不懂,纯粹帮顶
    3.通常奇数分频都得不到占空比50%的方波的。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-10 15:47
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-6-8 21:41:02 | 显示全部楼层
    本帖最后由 liubenyuan 于 2014-6-8 21:44 编辑

    一、temp已经被例化为寄存器了,那么,直接用每个寄存器进行判断就行了呀!

    clkout <= '0' when temp < 4 else '1';

    你最后那个逻辑很混乱,写代码一定要理解最终会综合成什么逻辑电路。

    二、哪有9分频站空比50%呀,只有偶数分频的。9分频50%需要用DCM或者PLL的。


    三、关于综合出来的是什么电路,建议你看看:
    http://www.markharvey.info/fpga/reset/rst.html

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-5-12 13:40
  • 签到天数: 154 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-6-9 00:23:44 | 显示全部楼层
    liubenyuan 发表于 2014-6-8 21:41
    一、temp已经被例化为寄存器了,那么,直接用每个寄存器进行判断就行了呀!

    clkout  ...

    奇数也是可以进行占空比为50%的分频的,建议你看看这个吧http://blog.sina.com.cn/s/blog_b3a827b30101t6d9.html
    回复

    使用道具 举报

    该用户从未签到

    发表于 2014-6-10 12:39:46 | 显示全部楼层
    ENTITY divider IS
    PORT( clkin   :  IN  STD_LOGIC;  --输入信号
          clkout  :  OUT STD_LOGIC  --输出信号
        );
    END divider ;


    ARCHITECTURE behv OF divider IS
    SIGNAL temp: INTEGER RANGE 0 TO 8;
    BEGIN
           PROCESS(clkin)
           BEGIN
                  IF clkin'EVENT AND clkin = '1' THEN
                         IF temp = 8 THEN
                                temp<= 0;
                         ELSE
                                temp<= temp + 1;
                         END IF;
                  END IF;         
           END PROCESS;

    这段程序有个问题 : TEMP 未给初值 , 导致不同的模拟程序会有不同的结果!
    改为下列程序看看 :
    ENTITY divider IS
    PORT( clkin   :  IN  STD_LOGIC;  --输入信号
           reset   :  IN  STD_LOGIC;  --输入信号
          clkout  :  OUT STD_LOGIC  --输出信号
        );
    END divider ;


    ARCHITECTURE behv OF divider IS
    SIGNAL temp: INTEGER RANGE 0 TO 8;
    BEGIN
           PROCESS(clkin, reset)
           BEGIN
              IF (reset = '1') then temp<= 0;
                  ELSIF clkin'EVENT AND clkin = '1' THEN
                         IF temp = 8 THEN
                                temp<= 0;
                         ELSE
                                temp<= temp + 1;
                         END IF;
                  END IF;         
                END IF;         
          END PROCESS;

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-5-12 13:40
  • 签到天数: 154 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-6-10 23:33:23 | 显示全部楼层
    yuming 发表于 2014-6-10 12:39
    ENTITY divider IS
    PORT( clkin   :  IN  STD_LOGIC;  --输入信号
          clkout  :  OUT STD_LOGIC  --输出 ...

    还是一样的结果
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 05:22 , Processed in 0.198889 second(s), 32 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.