|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位大虾好,最近在看王金明的《Verilog HDL程序设计教程》,里面有个关于function的用法的例题,自己有点想不通,虚心请教各位大虾,
这个例题是一个8-3编码器的模块,里面用到了function和assign,最后用 assign dout=code(din);调用function。模块程序是书上给的,然后我自己编了激励,想看看波形对不对。
因为是个8位输入的编码器,所以我的激励把8位的二进制数轮询一遍,看波形,波形是对的。但我有个问题。
function默认的返回值是reg型的,然后又有资料说assign赋值,等号两边都应该是wire型,这时若等式右边信号有变化,都会反应到等式左边去,那么这个模块中调用function的语句assign dout=code(din); code是reg型的,那code的值变化不会反应到dout上去,所以只有一个值。
那为什么实际中仿真的时候code的值变化能够反应到dout上去呢?
————————————————————————————————————————————————————————————————————-——————
以下是8-3编码器的模块程序
module code8_3(din,dout);
input[7:0] din;
output[2:0] dout;
wire[2:0] dout;
function [2:0] code;
input[7:0] din;
casex(din)
8'b0xxx_xxxx: code=3'b000;
8'b10xx_xxxx: code=3'b001;
8'b110x_xxxx: code=3'b010;
8'b1110_xxxx: code=3'b011;
8'b1111_0xxx: code=3'b100;
8'b1111_10xx: code=3'b101;
8'b1111_110x: code=3'b110;
8'b1111_1110: code=3'b111;
default: code=3'bxxx;
endcase
endfunction
assign dout=code(din);
endmodule |
|