← 2022 · 兆易创新 笔试

推荐答案 测试一下

下图电路在同一时钟域中,实现的功能是在SEL0与SEL1分别为0和1时,将DATA0加DATA1的结果传给REG输入端。

题目配图 题目配图
编程题 中等 笔试真题

参考答案

该电路为同步时序电路,功能由选择信号SEL0和SEL1控制。当SEL0=0且SEL1=1时,将DATA0与DATA1的加法结果赋值给寄存器REG的输入端,并在时钟上升沿更新到REG输出。其他情况下,REG保持原有值(或输出零/默认值,具体依据电路实现)。典型Verilog实现如下: ```verilog module adder_mux ( input clk, input rst_n, input [7:0] DATA0, DATA1, input SEL0, SEL1, output reg [7:0] REG ); wire [7:0] sum = DATA0 + DATA1; wire load = ~SEL0 & SEL1; // 选择条件:SEL0=0且SEL1=1 always @(posedge clk or negedge rst_n) begin if (!rst_n) REG <= 8'b0; else if (load) REG <= sum; // 其他情况REG保持 end endmodule ``` 解析要点: 1. **条件组合**:`load`信号使用`~SEL0 & SEL1`,确保仅在指定条件下加载加法结果。注意SEL0和SEL1的电平定义——若“分别为0和1”表示SEL0=0,SEL1=1,则如此实现。若含义为SEL0=0且SEL1=1独立条件(即两者同时满足),则同上。 2. **时序约束**:电路在同一时钟域,所有寄存器共用一个时钟,无跨时钟域问题。复位信号用于初始化寄存器,避免上电不定态。 3. **加法溢出**:DATA0和DATA1位宽均为8位,相加结果可能超过8位,代码中sum为8位,自动截断高位。若需保留进位,应扩展位宽或使用9位。 4. **多路选择器**:组合逻辑实现条件判断,生成load信号,触发寄存器更新。非加载周期,寄存器保持原值,避免毛刺。 5. **优先级**:复位优先级最高,其次为加载条件。保持操作隐含在else分支中。 易错点: - 忽略复位设计,导致寄存初始态未知。 - 将选择条件误写为`SEL0==0 || SEL1==1`,导致功能错误。 - 未考虑加法进位,导致数据丢失。 - 在同一时钟域内,组合逻辑输出直接连到寄存器输入,注意建立时间/保持时间满足。

涉及知识点

  • 时钟
  • 时序
  • Verilog
  • verilog
  • 跨时钟域
← 上一题
登录后反馈错题