vivado Latches、Tristates、

闩锁

Vivado日志文件报告已识别闩锁的类型和大小。

推断锁存通常是HDL编码错误的结果,例如不完整的if或case声明。

Vivado synthesis针对以下报告示例中显示的实例发出警告。此警告允许您验证推断的Latch功能是否为预期功能。
Latches Reporting Example

* Vivado.log *

WARNING: [Synth 8-327] inferring latch for variable 'Q_reg'

Report Cell Usage:
-----+----+-----
|Cell|Count
-----+----+-----
2 |LD | 1
-----+----+-----

Latch With Positive Gate and Asynchronous Reset
Coding Verilog Example
Filename: latches.v
// Latch with Positive Gate and Asynchronous Reset
// File: latches.v
module latches (
input G,
input D,
input CLR,
output reg Q
);
always @ *
begin
if(CLR)
Q = 0;
else if(G)
Q = D;
end
endmodule
Latch With Positive Gate and Asynchronous Reset
Coding VHDL Example
Filename: latches.vhd
-- Latch with Positive Gate and Asynchronous Reset
-- File: latches.vhd
library ieee;
use ieee.std_logic_1164.all;
entity latches is
port(
G, D, CLR : in std_logic;
Q : out std_logic
);
end latches;
architecture archi of latches is
begin
process(CLR, D, G)
begin
if (CLR = '1') then
Q <= '0';
elsif (G = '1') then
Q <= D;
end if;
end process;
end archi;
•三态缓冲器通常由信号或if-else结构建模。

•这适用于缓冲器驱动板上的内部总线还是外部总线设备所在的位置。

•在if-else的一个分支中,信号被分配了一个高阻抗值。下载编码示例中的编码示例文件。

三态实现

当驱动下列的

•电路的外部引脚(OBUFT)

•内部总线(BUFT):

○ 推断出的BUFT通过Vivado合成自动转换为LUT中实现的逻辑。

○ 当推断BUFT的内部总线驱动顶部模块的输出时,Vivado合成推断出OBUF。

三态报告示例

在合成过程中推断并报告三态缓冲液。

* Vivado log file *

Report Cell Usage:
-----+-----+-----
|Cell |Count
-----+-----+-----
1 |OBUFT| 1
-----+-----+-----

Tristate Description Using Concurrent Assignment Coding Verilog
Example
Filename: tristates_2.v
// Tristate Description Using Concurrent Assignment
// File: tristates_2.v
//
module tristates_2 (T, I, O);
input T, I;
output O;
assign O = (~T) ? I: 1'bZ;
endmodule
Tristate Description Using Combinatorial Process Implemented
with OBUFT Coding VHDL Example
Filename: tristates_1.vhd
-- Tristate Description Using Combinatorial Process
-- Implemented with an OBUFT (IO buffer)
-- File: tristates_1.vhd

library ieee;
use ieee.std_logic_1164.all;
entity tristates_1 is
port(
T : in std_logic;
I : in std_logic;
O : out std_logic
);
end tristates_1;
architecture archi of tristates_1 is
begin
process(I, T)
begin
if (T = '0') then
O <= I;
else
O <= 'Z';
end if;
end process;
end archi;
Tristate Description Using Combinatorial Always Block Coding
Verilog Example
Filename: tristates_1.v
// Tristate Description Using Combinatorial Always Block
// File: tristates_1.v
//
module tristates_1 (T, I, O);
input T, I;
output O;
reg O;
always @(T or I)
begin
if (~T)
O = I;
else
O = 1'bZ;
end
endmodule

相关推荐
Js_cold11 小时前
Verilog函数function
开发语言·fpga开发·verilog
Js_cold14 小时前
Verilog任务task
开发语言·fpga开发·verilog
brave and determined16 小时前
可编程逻辑器件学习(day3):FPGA设计方法、开发流程与基于FPGA的SOC设计详解
嵌入式硬件·fpga开发·soc·仿真·电路·时序·可编程逻辑器件
Lee_yayayayaya19 小时前
锁相环技术及FPGA实现
fpga开发
Js_cold1 天前
Verilog局部参数localparam
开发语言·fpga开发·verilog
promising-w1 天前
【FPGA】使用移位实现LED流水灯
fpga开发
爱吃汽的小橘1 天前
ZYNQ介绍
fpga开发
ThreeYear_s1 天前
电力电子技术学习路径与FPGA/DSP技术结合方向(gemini生成)
学习·fpga开发
奋斗的牛马2 天前
FPGA—ZYNQ学习spi(六)
单片机·嵌入式硬件·学习·fpga开发·信息与通信
GateWorld2 天前
FPGA核心约束类型与语法
fpga开发