查看: 1147|回复: 14

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

[复制链接]

1

主题

0

好友

946

积分

举人

Rank: 4

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

    [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;  

    最佳答案

    yuming54 查看完整内容

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

    使用道具 举报

    0

    主题

    0

    好友

    1221

    积分

    进士

    Rank: 5Rank: 5

    该用户从未签到

    发表于 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;
           这一段写法很怪 , 虽然可以模拟 , 但是可能无法综合出硬体线路 !
    回复

    使用道具 举报

    1

    主题

    0

    好友

    946

    积分

    举人

    Rank: 4

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

    [LV.7]常住居民III

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

    使用道具 举报

    294

    主题

    6

    好友

    5150

    积分

    状元

    Rank: 6Rank: 6

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

    [LV.7]常住居民III

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

    使用道具 举报

    1

    主题

    0

    好友

    946

    积分

    举人

    Rank: 4

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

    [LV.7]常住居民III

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

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

    使用道具 举报

    134

    主题

    35

    好友

    3252

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    慵懒
    2016-10-31 15:25
  • 签到天数: 734 天

    [LV.9]以坛为家II

    论坛版主职务勋章 爱板会员勋章 活跃会员勋章 热心会员勋章 技术高手勋章

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

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

    使用道具 举报

    13

    主题

    2

    好友

    764

    积分

    举人

    Rank: 4

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

    [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

    回复

    使用道具 举报

    1

    主题

    0

    好友

    946

    积分

    举人

    Rank: 4

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

    [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
    回复

    使用道具 举报

    0

    主题

    0

    好友

    1221

    积分

    进士

    Rank: 5Rank: 5

    该用户从未签到

    发表于 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;

    回复

    使用道具 举报

    1

    主题

    0

    好友

    946

    积分

    举人

    Rank: 4

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

    [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  --输出 ...

    还是一样的结果
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-6 08:57 , Processed in 0.154662 second(s), 20 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部