我在门级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]之间应该有空格吗?
答案 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.