要使标号为1的控制线 cs1,wr1,rd1,数据线data1,地址线add1优先级高于标号为2的。
以下是我写的,我感觉不太对,就是读写的优先操作有些问题,不过没有语法错误
module ram_1024(cs1,cs2,wr1,rd1,wr2,rd2,data1,data2,add1,add2);
input cs1,cs2,wr1,rd1,wr2,rd2;
inout[7:0]data1,data2;
input[9:0]add2;
input[9:0]add1;
reg[7:0] ram[1023:0];
assign data1=((!cs1&&!rd1)&&(cs1||wr1)&&(cs2||wr2))?ram[add1]:8'bzz;
assign data2=((!cs2&&!rd2)&&(cs1||wr1)&&(cs2||wr2))?ram[add2]:8'bzz;
always@( cs1 or wr1 or wr2 or cs2 )
begin
if(add1==add2)
begin
if(!cs1&&!wr1) ram[add1]=data1;
else if(!cs2&&!wr2) ram[add2]=data2;
end
else if(!cs1&&!wr1) ram[add1]=data1;
else if(!cs2&&!wr2) ram[add2]=data2;
end
endmodule
还有我在quartusii中用的device是EPIC6Q240C8,当我在bdf文件中用我编的这个rom的时候会有错
Error: Design contains 14830 blocks of type logic cell. However, device contains only 5980.
以上个人理解为该器件的门少了,不能构成这么大存储空间的rom,不知对不对。
Error: Can't fit design in device
小弟我刚学,请高手指点一下
希望能给个双口rom的代码,我不胜感激。
以下的有clock,但依然通不过啊,
module RAM_TWO_IO
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=10)
(
input [(DATA_WIDTH-1):0] data_a, data_b,
input [(ADDR_WIDTH-1):0] addr_a, addr_b,
input rd_a, wr_a,rd_b,wr_b,clk_a,clk_b,
output reg [(DATA_WIDTH-1):0] q_a, q_b
);
// Declare the RAM variable
reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];
always @ (posedge clk_a)
begin
// Port A
if (!wr_a)
begin
ram[addr_a] <= data_a;
end
else if(!rd_a)
begin
q_a <= ram[addr_a];
end
end
always @ (posedge clk_b)
begin
// Port B
if (!wr_b)
begin
ram[addr_b] <= data_b;
end
else if(!rd_b)
begin
q_b <= ram[addr_b];
end
end
endmodule
用Verilog编写8位的1024存储单元的双口ROM 出错
最后想说的是,从后端考虑,用寄存器搭建的RAM timing没有例化的好 针对你的问题:直接quartus有memory的选项的,选dual port
FPGA\/Verilog中的Rom问题
在FPGA中ROM是一个地址对应一个数据,8bits×1024words的Rom就是指地址从0~1023,每个地址是一个8bits数据。12864液晶是128列×64行,那么这个液晶总共的数据量为128×64=8192。而ROM的数据存错量为1024×8bits = 8192 bits,也就是说ROM内1个地址的数据对应液晶上8的点。至于图片怎么存在ROM内的,...
verilog编程技巧
将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口 RAM(DPRAM) 、单口 RAM(SPRAM)、 FIFO 等。在第一个缓冲周期,将输入的数据流缓存到 “ 数据缓冲模块 1” ;在第 2 个缓冲周期,通过 “ 输入数据选择单元 ”的切换,将输入的数据流缓存到 “ 数据缓冲模块 2” ,...
verilog实现矩阵乘法,我是FPGA初学者, 现在要实现一个矩阵相乘,即输入...
1把两个矩阵存进存储单元(寄存器),是怎样的时钟去写入数据的 如果A B是变量,数据就需要写入存储器而不是初始化进去,写入遵循存储器写入时序。2 如何取出数据进行乘法运算并累加,看到常用的是脉动阵列,但是我不是很懂 提供矩阵元素的地址,从存储器中读出,脉动阵列就是流水线结构。3.在软件编程...