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



我必须用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)这里没有家庭作业,2)我不完全理解你的任务。。。

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

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

因此,首先,你必须清楚你的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
...

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

附言:我敦促你读一些关于vhdl设计的书,例如理解信号和变量之间的区别,如何设计实体,if和where语句之间的区别是什么。对…的尊重是什么。。。生成和用于。。。循环等等…我自己就知道。在VHDL之前,我可以用C、C++、Java、Haskel等语言编程,但VHDL不是编程语言!如果你是从软件方面来学习VHDL的,你应该澄清自己,硬件建模是不一样的,你必须以不同的方式思考。

问候hr0m

最新更新