14回答

0收藏

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

FPGA/DSP FPGA/DSP 8322 人阅读 | 14 人回复 | 2014-06-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
分享到:
回复

使用道具 举报

回答|共 14 个

倒序浏览

沙发

yuming54

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

使用道具 举报

板凳

jie1095

发表于 2014-6-6 21:47:46 | 只看该作者

另外加上仿真结果图片如下

forum.jpg (55.81 KB, 下载次数: 241)

forum.jpg
回复

使用道具 举报

地板

de6ian

发表于 2014-6-6 23:18:14 | 只看该作者

很相看看Q2 6.9长什么样子?另外,VHDL的我不知道,仿真得写testbench吧
回复

使用道具 举报

5#

jie1095

发表于 2014-6-7 11:53:19 | 只看该作者

de6ian 发表于 2014-6-6 23:18
很相看看Q2 6.9长什么样子?另外,VHDL的我不知道,仿真得写testbench吧

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

使用道具 举报

6#

小马哈

发表于 2014-6-8 16:43:56 | 只看该作者

本帖最后由 zxq6 于 2014-6-8 16:53 编辑

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

使用道具 举报

7#

liubenyuan

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

回复

使用道具 举报

8#

jie1095

发表于 2014-6-9 00:23:44 | 只看该作者

liubenyuan 发表于 2014-6-8 21:41
一、temp已经被例化为寄存器了,那么,直接用每个寄存器进行判断就行了呀!

clkout  ...

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

使用道具 举报

9#

yuming54

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

回复

使用道具 举报

10#

jie1095

发表于 2014-6-10 23:33:23 | 只看该作者

yuming 发表于 2014-6-10 12:39
ENTITY divider IS
PORT( clkin   :  IN  STD_LOGIC;  --输入信号
      clkout  :  OUT STD_LOGIC  --输出 ...

还是一样的结果
回复

使用道具 举报

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

本版积分规则

关闭

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