Menu
CoddyTech

组合逻辑函数

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

Verilog function 将零时间计算封装起来,供模块内重复使用。声明返回值的位宽、输入参数和局部变量,然后将结果 assign 给 function 名称。组合函数不包含延迟或事件控制;有固定边界的循环可以描述重复逻辑。

相关摘录;挑战中提供了周围的声明和连接。

function [7:0] gray;
    input [7:0] value;
    begin gray = value ^ (value >> 1); end
endfunction

调用function会计算一个表达式,而不会增加仿真时间。

在每条路径上都为 function 结果赋值,并确保组合函数中不包含时序控制。

challenge icon

挑战

中等

实现一个 Verilog function gray,将无符号 8 位二进制值转换为格雷码,方法是将 value 与右移一位后的 value 进行异或。调用 function,并传入 a,以驱动 y。输出列:y。所有激励值都是已知的二进制值。

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

亲手试试

module dut (input [7:0] a, output [7:0] y);
    // 用你的设计替换这里的占位内容。
    assign y = 0;
endmodule
quiz icon自我测试

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

RTL 设计与验证中的所有课

自己练习: Verilog 在线编译器