VHDL - 显示0-9的数字,暂停1秒

时间:2014-02-10 15:02:49

标签: vhdl modelsim

我必须用VHDL编写程序,在'屏幕'上显示0-9的数字,暂停1秒(基本上是时钟0-9),另外我必须检查ModelSim,这对我来说更难。我知道我不应该寻求这样的帮助,但我只需要它到我的大学。 我是vhdl的初学者,我从来没有学过它,所以任何线索/解决方案都会很好。 我知道我必须这样使用......

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
...
SIGNAL countSek : STD_LOGIC_VECTOR(24 DOWNTO 0);
...
BEGIN
...
-- count 1 second
PROCESS (Clock)
BEGIN
IF (Clock'EVENT AND Clock = '1') THEN
countSec <= countSek + '1';
END IF;
END PROCESS;

PROCESS (Clock)
BEGIN
IF (Clock'EVENT AND Clock = '1') THEN
IF (Resetn = '0') THEN
licznik <= (OTHERS => '0');
ELSIF (countSek = 0) THEN
counter <= counter + '1';
END IF;
END IF;
END PROCESS;

我也有免费版的ModelSim,我读过我需要手动检查我的程序。我知道如何开始模拟等,但不知道接下来该做什么(如何在modelsim中看到我的程序实际上是0-9)。此外,我不需要检查50MHZ时钟或类似的东西。 对不起,我的英语很差,而且提前thx

1 个答案:

答案 0 :(得分:2)

我会尽量给你一些提示或想法,因为1)这里没有家庭作业,2)我完全不了解你的任务......

所以我对你的任务的理解是:

制作一个计数器,从0到9重复计数,延迟1秒。

首先,您必须清楚如何/在哪里获得1秒钟。 出于您的目的,只有一种方法可以获得时间管理,抛出系统的时钟。例如:您的芯片/电路板/ FPGA以50MHz时钟运行。你需要多少个时钟来获得一秒钟?那么它显然将是5000万个周期,所以你必须建立一个计数到5000万的计数器然后发送一个信号(并将其自身设置为0并再次开始计数)。有了这个你有你的反模块。 这里的问题,我怀疑ModelSim能够(由于免费版本)数到5000万,因为它通常会在一段时间后停止模拟。因此,出于模拟目的,您可以将计数器设置为最多计数,例如10。

所以你的计数器过程看起来像(!!!没有语法检查,没有完成!!!):

...
PROCESS (Clock)
BEGIN
IF (Clock'EVENT AND Clock = '1') THEN
    counter <= counter + '1';
    if( counter = SOME_NUMBER ) then
        SIGNAL_COUNTED <= '1';
        counter <= "0";
    else
        SIGNAL_COUNTER <= '0';
    end if;
END IF;
END PROCESS;

你的第二个过程是你实际的0到9计数器。这应该很容易,如果你有延迟工作,你可以:

PROCESS (SIGNAL_COUNTED)
BEGIN
if(rising_edge(SIGNAL_COUNTER)) then
...

我认为这应该让事情变得清晰。

P.S。:我建议您阅读一些关于vhdl-design的书,理解信号和变量之间的区别,如何设计实体,if和where语句之间的区别是什么。什么是...生成和...循环等之间的差异...我自己知道这一点。在VHDL之前,我可以用C,C ++,Java,Haskel等编程,但VHDL不编程!如果你从软件方面来到VHDL,你应该自己说明硬件建模是不一样的,你必须以不同的方式思考。

关注hr0m