← 2022 · 新华三 笔试

推荐答案 测试一下

格雷码在异步电路中的应用:

a)设有两路异步clock:clk0,clk1,要求在ck0 domain产生一个4bit计数器,并把计数结果传输到ck1 domain(Fclk1>2*Fclk0),请用Verilog实现该设计:(20分)
单选题 中等 笔试真题单选

参考答案

本题为多项综合设计题,涉及异步时钟域同步、格雷码特性、同步FIFO及组合逻辑电路设计。 (a)第一问:在clk0域产生4bit计数器,传输到clk1域(Fclk1>2*Fclk0)。需将计数器值转换为格雷码后同步,再转回二进制。Verilog实现要点:使用两级同步器(ff1, ff2)对格雷码逐位同步,但注意格雷码每位独立。计数器步进为1时安全;若步进为2,即0→2→4→6→0,格雷码连续值可能跳过多位,如从0(0000)到2(0010)格雷码为0000→0011,两位同时变化,未使用冗余格雷码特性,跨时钟域时可能产生亚稳态或错误采样。改进:若步进固定为2,可单独设计步进2的格雷码计数器(如用二进制加2转格雷),或用握手同步。 (b)第二问:深度16的同步FIFO,8bit位宽,空满信号。使用读/写指针、双口RAM。Full:写指针追赶读指针(差16);Empty:两指针相等。需注意空满判断条件:full时写指针+1等于读指针(考虑深度16时写指针+1对16取模等于读指针);empty时写指针等于读指针。Verilog代码要点:reg [3:0] wptr, rptr; reg [7:0] mem [15:0]; assign wfull = (wptr == rptr - 1'b1) ? 0 : (wptr == rptr - 1'd16)? 1 : (wptr[3:0] == (rptr[3:0] - 1'd1)) ? 1 : 0; 实际常用二进制加比较器判断。 (c)第三问:根据波形图(未给出),需用1个DFF和门电路实现。通常这种题输入din[2:0]随机,输出out1、out2可能为检测特定序列或组合逻辑。典型解法:用DFF寄存上一拍值,组合逻辑判断当前与前一拍条件。例如out1 = din[2] & ~din[1] | ...;out2 = ...。用Verilog描述:always @(posedge clk) dff <= din; assign out1 = (din[2:0] == 3'b101) & (dff[2:0] == 3'b010)? 1 : 0; 具体需根据波形推导。 易错点:异步格雷码同步必须将整个计数器转为格雷码再逐位同步,不能直接用二进制同步;步进2时格雷码可能多位变化,需用双锁存器+边沿检测或握手协议。FIFO空满判断时注意深度与指针位宽匹配。

涉及知识点

  • 格雷码转换及跨时钟域同步
  • 异步FIFO设计中多位同步问题
  • 同步FIFO空满判断逻辑
  • 单DFF实现时序逻辑检测
登录后反馈错题
下一题 →