verilog中如何将二维存储器转为一维的数组并赋值,求大神帮忙!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog中如何将二维存储器转为一维的数组并赋值,求大神帮忙!相关的知识,希望对你有一定的参考价值。

比如:
module pixel_interpolation(clk,rst,A,B,C,D,E,F,data_out);
input clk,rst,A,B,C,D,E,F;
output data_out;
reg [1:6] romb [1:6];
reg [1:36] data_in;
/*********************************data_initial***********************************/
integer i;
always @(posedge clk or negedge rst)
if(!rst)
begin
for(i=0;i<6;i=i+1)
romb [i] <= 6'b0;
data_in <= 36'b0;
end
else
$readmemb("ram.txt",romb);//读取ram里头的6X6数组。然后接下怎么赋值给data_in这个数组啊?
求大神帮忙!
谢谢!
又来麻烦你了!嘿嘿!

参考技术A module pixel_interpolation(
input wire clk,
input wire rst_n,
input wire ram_cs, // Active high
input wire ram_wr_en,
input wire [2:0] ram_addr,
input wire [5:0] ram_din,
output reg [5:0] ram_dout,
output reg [35:0] ram_bits
);

parameter val_0 = 6'h11;
parameter val_1 = 6'h12;
parameter val_2 = 6'h13;
parameter val_3 = 6'h24;
parameter val_4 = 6'h25;
parameter val_5 = 6'h26;

// generate the ram memory
reg [5:0] mem [0:5];
wire ram_wr_act = ram_cs & ram_wr_en & (ram_addr<3'd6);
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin // set initial values here according to your need
mem[0] <= val_0;
mem[1] <= val_1;
mem[2] <= val_2;
mem[3] <= val_3;
mem[4] <= val_4;
mem[5] <= val_5;
end
else if(ram_wr_act ) mem[ram_addr] <= ram_din;
end

wire ram_rd_act = ram_cs & ~ram_wr_en & (ram_addr<3'd6);
always @(posedge clk or negedge rst_n) begin
if(~rst_n) ram_dout <= 6'h0;
else if( ram_rd_act) ram_dout <= mem[ram_addr];
end

// generate the ram_bits
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin // set initial values here according to your need
ram_bits[5:0] <= val_0;
ram_bits[11:6] <= val_1;
ram_bits[17:12] <= val_2;
ram_bits[23:18] <= val_3;
ram_bits[29:24] <= val_4;
ram_bits[35:30] <= val_5;
end
else if(ram_wr_act ) begin
case(ram_addr)
3'd0 : ram_bits[5:0] <= ram_din;
3'd1 : ram_bits[11:6] <= ram_din;
3'd2 : ram_bits[17:12] <= ram_din;
3'd3 : ram_bits[23:18] <= ram_din;
3'd4 : ram_bits[29:24] <= ram_din;
3'd5 : ram_bits[35:30] <= ram_din;
endcase
end
end本回答被提问者采纳

verilog数组赋值

verilog的二维数组怎么赋值啊,这是我定义的二维数组reg [7:0]rom[7:0];应该怎么赋值才可以呢,我用parameter rom[0]=8'b11111110;可是ISE报错,把中括号去掉就不报错了,可是没生成存储器!

参考技术A 你要生成存储器
就直接这样 reg[7:0]rom[7:0];就是生成了一个,8个8位的存储器
要赋值的话不要什么parameter,直接赋值就行了
比如 rom[0]=8'B11111110;
你这样试试行不行
参考技术B 都不知道该怎么说了啊。。。。。。
parameter和reg怎么能一样呢 parameter是个定义参数的关键字。
看看我在另一个帖子里详细的解释如何赋值的。
好好看看verilog IEEE的手册
http://zhidao.baidu.com/question/370468986.html?oldq=1
参考技术C 既然定义了reg类型,为什么用parameter呢,这样不对的。reg类型的信号只能在initial或者always块里才能用,你可以尝试改一下。去掉中括号可以应该是因为它没有被认为是你先前定义的二维数组。 参考技术D reg [7:0]这种怎么叫二维呢,明明就是一维的,就是个8位寄存器,看看语法吧

以上是关于verilog中如何将二维存储器转为一维的数组并赋值,求大神帮忙!的主要内容,如果未能解决你的问题,请参考以下文章

php函数array_column如何将二维数组转为一维数组

在opencv中,如何将二维数组转化为一副图像进行显示?

verilog 怎么给二维数组赋值

verilog数组赋值

reduce()方法:求和求乘积数组中每个元素出现的次数去重二维和多维数组转为一维数组

将二维数组映射到一维数组