Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
门级Verilog语法_Verilog - Fatal编程技术网

门级Verilog语法

门级Verilog语法,verilog,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”的连接不

我在门级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]之间是否应该有空格?

对于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
//创建24位10深内存
reg[23:0]a_内存[0:9];
整数i;
初始开始

对于(i=0,i合成工具可以对您的设计执行两个操作:

  • 展平:它们将您的分层设计转换为一个没有分层结构的模块。在这种情况下,展平模块中与非展平模块中的信号相对应的所有信号名称
    mux_inst.aggr_portd_inst.dskw_inst
    都将具有前缀名称:
    \mux_inst/aggr portd_inst/dskw inst。“\”用于转义“/”字符

  • 位爆破:位爆破是将总线/阵列分解为其单个成员的术语。例如,最初定义为
    逻辑[2:0]阵列
    的阵列将被分解为:

      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]。

右括号前应该有空格:
.Z(\mux_inst/aggr_portd_inst/dskw_inst/ds_mem_slice_4_5_3)
主要问题是什么:(.a(\mux_inst/aggr_portd_inst/dskw_inst/ds_mem_slice[4][5])并且应该是[4]和[5]之间的空格。什么不清楚?为什么你认为应该有空格?为什么你对连接到
Z
,而不是
a
,感到高兴?谢谢,现在它的意思很清楚,我看到[4][5]之间不需要空格@Morgan:根据
\mux\u inst/aggr\u portd\u inst/dskw\u inst/ds\u mem\u slice的定义,可能需要也可能不需要空格。如果
\mux\u inst/aggr\u portd\u inst/dskw\u inst/ds\u mem\u slice[4]
是向量的名称,那么
\mux\u inst/aggr\u portd\u inst/dskw inst/ds\u mem inst[4]
正在访问其第5位,在这种情况下需要一个空格。