Menu
CoddyTech

优先编码器

本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 2 课,共 38 课。

编码器会将请求位映射到一个索引。多个请求同时有效时,需要明确的优先级规则。if/else-if 链会优先处理靠前的分支;单独的有效信号可以区分没有请求和索引为零的情况。

相关代码片段;挑战中提供了周围的声明和连接。

if (req[3]) code = 3;
else if (req[2]) code = 2;
else if (req[1]) code = 1;
else code = 0;

第一个条件为 true 的分支会生效,因此优先处理最高位的请求。

明确说明优先级顺序,并明确定义无请求时的输出。

challenge icon

挑战

中等

将 4 位 req 中最高位的置位编码到 code。如果存在任何请求,就将 valid 设为有效;当 req 为零时,code 和 valid 都为零。输出列:code、valid。所有激励值都是已知的二进制值。

完成 design.v,并保留模块名称和端口。锁定的 testbench.v 会提供输入变化,并在输入稳定后打印输出。它使用模拟器参数(例如 +CASE=1)选择场景;无需标准输入。不要在设计中添加打印语句、延迟或模拟终止语句。预期输出是每次观测对应一行十进制值,数值之间以一个空格分隔,并以换行符结尾。

亲手试试

module dut (input [3:0] req, output reg [1:0] code, output reg valid);
    // 用你的设计替换这段占位代码。
    initial code = 0;
    initial valid = 0;
endmodule
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

RTL 设计与验证中的所有课

自己练习: Verilog 在线编译器