Verilog代码实例化的简单理解(以38译码器为例)

在这之前,简单先总结一下这段时间对Verilog(硬件描述)和C(软件)的区别。在openhw论坛中看到这样一句话:一个例化调用就相当于一个电路,你用if语句,有时候要综合出这个电路有时候又不要综合出这个电路了,这个不是让人家软件为难吗!你要这样,综合出来时必须的,至于用不用,要看你有没有信号给它,它的输出有没有引回来!!!只要有可能用到的模块,必须综合出来,至于后续的使用,则根据自己的引脚链接。

实例化:什么是实例化,就我的理解,就是在一个模块外,在加一个封装。这样的目的是为方便。因为内部一个可以实现特定功能,外部只需要改变输入的数值就可以实现相应的功能。

以3_8译码器为例

//利用3线-8线译码器实现逻辑函数F(A,B,C)=m1+m2+m5+m7。
module yimaqi(in,sel,y);
input [2:0] in;
input sel;
output  [1:0]y;
reg [1:0]y;
wire [7:0] out;
always@(*)
 begin
 if(sel)
  case (in) 
      3'b000    :   begin  y=out[0] ; end
      3'b001    :   begin  y=out[1] ; end
      3'b010    :   begin  y=out[2] ; end
      3'b011    :   begin  y=out[3] ; end
      3'b100    :   begin  y=out[4] ; end
      3'b101    :   begin  y=out[5] ; end
      3'b110    :   begin  y=out[6] ; end
      3'b111    :   begin  y=out[7] ; end 
   endcase
 else
   	y =2'bxx ;
  end
endmodule

module top_yimaqi(in,y,sel);
input [2:0] in;
wire [1:0] sel;
output [1:0] y;
wire [7:0] out;
yimaqi A1(
    .in(in),
    .sel(sel),
    .y(y));
assign out = 8'b1010_0110;
endmodule

模块 top_yimaqi为顶层模块。yimaqi为被实例化模块。

yimaqi A1(
    .in(in),//前面的in为被调用模块中的端口,括号内的in为和其向连接的端口
    .sel(sel),
    .y(y));/*实例化时采用名字关联,A1是名称,可以随便取名

悬空处理:

yimaqi A1(
    .in( ),    .sel(sel) ,  .y( ));

不同端口长度的处理
当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配。

位选择:   .in(in[0]),  .in(in[1]),~~~~~~

 

 

你可能感兴趣的:(FPGA逻辑篇)