vivado VHDL序列逻辑

VHDL顺序逻辑

当一些分配的信号不是时,VHDL过程是顺序的(与组合相反)在进程内的所有路径中显式分配。生成的硬件具有内部状态或内存(触发器或锁存器)。

建议:使用基于灵敏度列表的描述风格来描述时序逻辑。使用具有灵敏度列表的过程来描述时序逻辑包括:

•时钟信号

•异步控制顺序元件的任何可选信号(异步设置/重置)

•模拟时钟事件的if语句。

Sequential Process With a Sensitivity List Syntax
process (<sensitivity list>)
begin
<asynchronous part>
<clock event>
<synchronous part>
end;

异步控制逻辑建模

任何异步控制逻辑的建模(异步设置/重置)在时钟之前完成事件声明。同步逻辑的建模(数据、可选同步设置/重置、可选时钟enable)在时钟事件的if分支中完成。

Clock Event Statements
Describe the clock event statement as:
• Rising edge clock:
if rising_edge (clk) then
• Falling edge clock:
if falling_edge (clk) then

缺少信号

如果灵敏度列表中缺少任何信号,则合成结果可能与初始结果不同设计规范。在这种情况下,Vivado synthesis会发出警告消息,并添加灵敏度列表中缺少信号。

重要!为了避免模拟过程中出现问题,在HDL源中显式添加所有丢失的信号代码并重新运行合成。

没有灵敏度列表的VHDL顺序过程

Vivado合成允许使用等待语句来描述顺序过程。这个在没有灵敏度列表的情况下描述了顺序过程。wait语句是第一个语句,wait语句中的条件描述顺序逻辑时钟。

重要!同一个顺序进程不能同时具有敏感度列表和等待语句,并且只允许使用一个等待语句。

Sequential Process Using a Wait Statement Coding Example (VHDL)
process begin
wait until rising_edge(clk);
q <= d;
end process;
Describing a Clock Enable in the wait Statement Example (VHDL)
You can describe a clock enable ( clken ) in the wait statement together with the clock.
process begin
wait until rising_edge(clk) and clken = '1';
q <= d;
end process;
Describing a Clock Enable After the Wait Statement Example (VHDL)
You can describe the clock enable separately, as follows:
process begin
wait until rising_edge(clk);
if clken = '1' then
q <= d;
end if;
end process;

描述同步控制逻辑

您可以使用与描述时钟所示相同的编码方法来描述同步控制逻辑,例如同步复位或设置。

重要!不能使用进程来描述具有异步控制逻辑的顺序元素没有敏感度列表。只有具有敏感度列表的进程才允许这样的功能。Vivado合成不允许基于wait语句描述Latch。为了获得更大的灵活性,请描述使用具有敏感度列表的进程的同步逻辑。

VHDL初始值和操作设置/重置

您可以在声明寄存器时对其进行初始化。初始化值是一个常量,可以可以从函数调用中生成。

初始化寄存器示例一(VHDL)

此编码示例指定一个通电值,在该值中初始化顺序元素当电路通电并且应用电路全局复位时。

signal arb_onebit : std_logic := '0';
signal arb_priority : std_logic_vector(3 downto 0) := "1011";
Initializing Registers Example Two (VHDL)
Filename: initial_1.vhd
This coding example combines power-up initialization and operational reset.
--
-- Register initialization
-- Specifying initial contents at circuit powes-up
-- Specifying an operational set/reset
--
-- File: VHDL_Language_Support/initial/initial_1.vhd
--
library ieee;
use ieee.std_logic_1164.all;
entity initial_1 is
Port(
clk, rst : in std_logic;
din : in std_logic;
dout : out std_logic
);
end initial_1;
architecture behavioral of initial_1 is
signal arb_onebit : std_logic := '1'; -- power-up to vcc
begin
process(clk)
begin
if (rising_edge(clk)) then
if rst = '1' then -- local synchronous reset
arb_onebit <= '0';
else
arb_onebit <= din;
end if;
end if;
end process;
dout <= arb_onebit;
end behavioral;
Vivado是一种常用的FPGA设计工具,可以用于设计和验证数字电路。在数字电路设计中,序列信号延时是一个重要的参数,它表示信号从输入到输出所需的时间。 Vivado具有强大的时序分析和延时测试工具,可以帮助设计人员评估和优化设计中的信号延时。 要进行序列信号延时测试,需要进行以下步骤: 1. 编写设计代码:首先,设计人员需要使用HDL语言(如VHDL或Verilog)编写设计代码。代码中要包含被测试的信号路径,以及输入和输出的时钟信号。 2. 生成设计文件:将设计代码导入Vivado工具,并进行综合和实现。综合是将设计代码转换为门级电路的过程,实现是将门级电路映射到目标FPGA器件上的过程。 3. 进行时序分析:在综合和实现完成后,可以使用Vivado的时序分析工具来评估设计中的信号延时。时序分析可以提供各个信号路径的延时信息,并帮助设计人员确定是否满足设计要求。 4. 进行延时测试:在时序分析的基础上,设计人员可以使用Vivado的延时测试工具来验证设计中的信号延时。延时测试会在设计中预先定义的输入情况下,通过模拟或硬件测试验证信号延时是否满足要求。 5. 优化设计:如果延时测试结果不满足要求,设计人员可以使用Vivado提供的优化工具来改善设计中的信号延时。例如,可以尝试重新布局电路、优化逻辑综合选项或调整时钟频率等。 通过以上步骤,设计人员可以使用Vivado工具进行序列信号延时测试,并逐步优化设计,以满足设计要求。Vivado的丰富功能和易用性使得设计人员能够更快速、准确地完成延时测试任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cckkppll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值