门级Verilog语法

时间:2014-05-21 12:35:36

标签: verilog

我在门级Verilog中有以下启动。

bufx2 BH2_BUF (
  .A(\mux_inst/aggr_portd_inst/dskw_inst/ds_mem_slice[4][5] ),
  .Z(\mux_inst/aggr_portd_inst/dskw_inst/ds_mem_slice_4__5_3) 
);

在我理解不足的情况下,缓冲区的“Z”引脚连接到:“\ mux_inst / aggr_portd_inst / dskw_inst / ds_mem_slice_4__5_3”

1.但“A”的连接不清楚 2. [4]和[5]之间应该有空格吗?

2 个答案:

答案 0 :(得分:2)

综合工具可以对您的设计执行两项操作:

  • 展平:他们将您的层次结构设计转换为没有层次结构的单个模块。在这种情况下,展平模块中与非展平模块mux_inst.aggr_portd_inst.dskw_inst中的信号对应的所有信号名称将具有前缀名称:\mux_inst/aggr_portd_inst/dskw_inst。 '\'用于转义'/'字符。

  • 爆破:爆破是将公交车/阵列分解为其各个成员的术语。例如,最初定义为logic [2:0] array的数组将被分解为:

      logic \array[2] ;
      logic \array[1] ;
      logic \array[0] ;
    

同样,'\'用于转义'['和']'字符。如果他们的数组是二维的,你会得到:logic \array[2][0] ;,它的作用类似于对应于数组成员[2] [0]的单线。

在您的情况下,看起来合成器执行扁平化和钻头爆破。

可能有一种罕见的情况,合成器仅在一个维度上执行钻头爆破并将另一个维度保持为阵列。在这种情况下,\array[2] [0] ;的含义与logic \array[2][0] ;不同。前者是名为\array[2]的数组的成员0,而后者是单线,它是钻头爆破的结果,对应于钻头爆破前阵列的索引[2] [0]。

答案 1 :(得分:0)

使用Verilog二进制字,可以使用类似语法的数组访问每个位。

//Create 24 bit word
reg [23:0] a_word;
reg a_bit;

//Access the MSB (bit 23)
initial begin
  a_word    = 24'b0;
  a_bit= a_word[23] ;
end

可以添加额外的维度,最基本的二维数组通常被称为内存。这里使用先前使用的语法,第一个[]访问一个单词,使用双[][]我们访问一个位。

// Create 24 bit 10 deep memory
reg [23:0] a_memory [0:9];

integer i;
initial begin 
  for (i=0, i<10, i=i+1) begin
    a_memory[i] = 24'b0;
  end

  //Access a word
  a_word = memory[1];

  //Access a bit
  a_word[4] = memory[1][4];
  a_bit     = memory[1][4];
end

因此,如果ds_mem_slice被声明为内存,那么\mux_inst/aggr_portd_inst/dskw_inst/ds_mem_slice[4][5]正在访问它的一个位。 Word 4 bit 5.