HDL编码技术
介绍
硬件描述语言(HDL)编码技术使您能够:
•描述数字逻辑电路中最常见的功能。
•充分利用AMD设备的体系结构功能。
•模板可从AMD Vivado™设计套件集成设计环境中获得(侧面)。要访问模板,请在"窗口"菜单中,选择"语言模板"。本章包括编码示例。从"coding"下载编码示例文件示例。
VHDL的优点
•实施更严格的规则,特别是强类型、不太宽容和容易出错的规则
•HDL源代码中RAM组件的初始化更容易(Verilog初始块不太方便)
•一揽子支持
•自定义类型
•列举的类型
•无reg与wire混淆
Verilog的优势
•类似C的语法
•更紧凑的代码
•阻止评论
•没有VHDL中的重型组件实例化SystemVerilog的优势
•与Verilog相比,代码更加紧凑
•结构和枚举类型可实现更好的可扩展性
•用于更高抽象级别的接口
•支持Vivado合成
触发器、寄存器和锁存器
Vivado合成识别触发器,寄存器具有以下控制信号:
•上升沿或下降沿时钟
•异步设置/重置
•同步设置/重置
•时钟启用
触发器、寄存器和锁存器描述如下:
•顺序过程(VHDL)
•始终阻止(Verilog)
•触发器的always_ff,锁存器的always_lock(SystemVerilog)
进程或总是阻止敏感度列表应列出:
•时钟信号
•所有异步控制信号
触发器和寄存器控制信号
触发器和寄存器控制信号包括:
•时钟
•异步和同步设置和重置信号
•时钟启用
编码指南
•不要异步设置或重置寄存器。
○ 控制集重新映射变得不可能。
○ 设备资源中的顺序功能,如块RAM组件和DSP块,只能同步设置或重置。
○ 如果使用异步设置或重置寄存器,则无法利用设备资源或被配置为次优。
•不要描述同时具有设置和重置功能的触发器。
○ 没有触发器基元同时具有设置和重置功能,无论是同步的还是异步。
○ 同时具有设置和重置功能的触发器基元可能会对区域和表演
•尽可能避免操作设置/重置逻辑。还有其他更便宜的方法以实现所需的效果,例如通过定义来利用电路全局重置初始内容。
•始终将触发器基元的时钟启用、设置和重置控制输入描述为活动高电平。
如果它们被描述为有效低,则产生的反相器逻辑惩罚电路表演
触发器和寄存器推理
Vivado综合根据HDL代码的方式推断出四种类型的寄存器基元书面的
•FDCE:D触发器,带时钟启用和异步清除
•FDPE:D触发器,带时钟启用和异步预设
•FDSE:D触发器,带时钟启用和同步设置
•FDRE:D触发器,带时钟启用和同步复位
触发器和寄存器初始化
要在电路通电时初始化寄存器的内容,请指定信号的默认值在申报期间。
触发器和寄存器报告
•在HDL合成过程中推断并报告寄存器。
•HDL合成过程中推断出的寄存器数量可能不完全等于该数量
"设计摘要"部分中的触发器基元的。
•"触发器"基元的数量取决于以下过程:
○ 将寄存器吸收到DSP块或块RAM组件中
○ 寄存器重复
○ 移除常量或等效触发器
触发器和寄存器报告示例
RTL Component Statistics
Detailed RTL Component Info :
+---Registers :
8 Bit Registers := 1
Report Cell Usage:
-----+----+-----
|Cell|Count
-----+----+-----
3 |FDCE| 8
-----+----+-----
触发器和寄存器编码示例
以下小节提供了触发器和寄存器。从编码示例下载编码示例文件。
使用Rising Edge编码注册Verilog示例
文件名:registers_1.v
// 8-bit Register with
// Rising-edge Clock
// Active-high Synchronous Clear
// Active-high Clock Enable
// File: registers_1.v
module registers_1(d_in,ce,clk,clr,dout);
input [7:0] d_in;
input ce;
input clk;
input clr;
output [7:0] dout;
reg [7:0] d_reg;
always @ (posedge clk)
begin
if(clr)
d_reg <= 8'b0;
else if(ce)
d_reg <= d_in;
end
assign dout = d_reg;
endmodule
具有上升沿时钟编码的触发器寄存器VHDL示例
文件名:registers_1.vhd
-- Flip-Flop with
-- Rising-edge Clock
-- Active-high Synchronous Clear
-- Active-high Clock Enable
-- File: registers_1.vhd
library IEEE;
use IEEE.std_logic_1164.all;
entity registers_1 is
port(
clr, ce, clk : in std_logic;
d_in : in std_logic_vector(7 downto 0);
dout : out std_logic_vector(7 downto 0)
);
end entity registers_1;
architecture rtl of registers_1 is
begin
process(clk) is
begin
if rising_edge(clk) then
if clr = '1' then
dout <= "00000000";
elsif ce = '1' then
dout <= d_in;
end if;
end if;
end process;
end architecture rtl;