微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于verilog中function和assign的用法,有个问题请教

关于verilog中function和assign的用法,有个问题请教

时间:10-02 整理:3721RD 点击:
各位大虾好,最近在看王金明的《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

code是函数,该设计调用了这个函数,所以输出当然要随着函数的输出变化了。
assign dout=code(din);
就像设计和激励一样,设计输出是reg的可是激励调用是用的是wire的。

code是函数,该设计调用了这个函数,所以输出当然要随着函数的输出变化了。
assign dout=code(din);
就像设计和激励一样,设计输出是reg的可是激励调用是用的是wire的。

"然后又有资料说assign赋值,等号两边都应该是wire型"
这种说法是错误的,等式右边的不一定要是wire型

    我明白了,多谢回答

    那就是说,等式右边是reg型时,它的变化也会反映到等式左边



   是的

神马?

恩。支持下。function返回值为code...调用code()函数,可以在assign语句,也可以在always语句中吧。

lu guo..........

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top