verilog学习-变量类型理解

(1)

reg [7:0]  mema[255:0];

这个例子定义了一个名为mema的存储器,该存储器有256个8位的存储器。该存储器的地址范围是0到255。注意:对存储器进行地址索引的表达式必须是常数表达式。

另外,在同一个数据类型声明语句里,可以同时定义存储器型数据和reg型数据。见下例:

 

parameter  wordsize=16,        //定义二个参数。

memsize=256;

reg [wordsize-1:0] mem[memsize-1:0],writereg, readreg;

 

尽管memory型数据和reg型数据的定义格式很相似,但要注意其不同之处。如一个由n个1位寄存器构成的存储器组是不同于一个n位的寄存器的。见下例:

 

reg [n-1:0] rega;     //一个n位的寄存器

reg mema [n-1:0];     //一个由n个1位寄存器构成的存储器组

 

一个n位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行。见下例:

 

rega =0;    //合法赋值语句

mema =0;    //非法赋值语句

 

如果想对memory中的存储单元进行读写操作,必须指定该单元在存储器中的地址。下面的写法是正确的。

mema[3]=0;  //给memory中的第3个存储单元赋值为0。

1.1 寄存器赋值(选择局部数据赋值)

//assign w[3:0] = b[0:3];    // Assign upper 4 bits of b to lower 4 bits of w. w[3]=b[0], w[2]=b[1], etc.
b[3:0]      // Illegal. Vector part-select must match the direction of the declaration.//
2, AaaaaaaaBbbbbbbbCcccccccDddddddd => DdddddddCcccccccBbbbbbbbAaaaaaaa
可以采用向量的局部数据赋值实现

module top_module(
input [31:0] in,
output [31:0] out );//

// assign out[31:24] = ...;
assign out[31:24]=in[7:0];
assign out[23:16]=in[15:8];
assign out[15:8]=in[23:16];
assign out[7:0]=in[31:24];
endmodule

 






posted @ 2021-03-11 17:50  曙光中远航  阅读(939)  评论(0)    收藏  举报