推荐答案
测试一下
题目
设计输入。Verilog或VHDL编写代码。
参考答案与知识点
参考答案
参考答案:设计一个通用的输入同步与边沿检测模块。Verilog代码如下:
```verilog
module input_sync_edge (
input wire clk,
input wire rst_n,
input wire async_in,
output wire pos_edge,
output wire neg_edge,
output wire sync_out
);
reg [1:0] sync_reg;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
sync_reg <= 2'b00;
else
sync_reg <= {sync_reg[0], async_in};
end
assign sync_out = sync_reg[1];
reg sync_prev;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
sync_prev <= 1'b0;
else
sync_prev <= sync_out;
end
assign pos_edge = sync_out & ~sync_prev;
assign neg_edge = ~sync_out & sync_prev;
endmodule
```
解析:该模块实现异步输入信号的同步化及边沿检测。两级触发器(sync_reg)构成经典同步器,降低亚稳态传播概率。第三级触发器(sync_prev)延迟一拍,通过异或逻辑产生上升沿和下降沿脉冲。
考点:1. 同步器级数(至少两级)与亚稳态概率关系;2. 边沿检测的组合逻辑实现;3. 复位同步问题(异步复位同步释放虽未体现,但常考);4. 避免在同步链中使用组合逻辑反馈;5. 输入信号需满足setup/hold时间,仿真时需加延迟模型。
易错点:1. 将同步器输出直接用于组合逻辑,忽略建立时间;2. 同步器寄存器复位值未与逻辑对应;3. 边沿检测使用了非阻塞赋值但漏写触发器;4. 忽略了异步复位对亚稳态抑制的影响;5. 认为一级触发器足够消除亚稳态。
若题目要求VHDL:类似架构,使用std_logic_vector(1 downto 0)构成移位寄存器。核心原理相同,语言语法不同。
涉及知识点
- Verilog
- verilog
- 组合逻辑
- 复位
- setup