首先说明一下 代码都是自己完全手写的,如果有人看了我的代码,欢迎指出不足,写的不好也不要嘲笑,一个字一个字写出来的。
- 1、目的
测试双口RAM的乒乓操作的功能,研究RAM输入输出操作,以及乒乓操作时序。即可以运用乒乓操作将数据完整的存入两个缓冲RAM中,并按要求读出并进行模拟累加运算。
通过乒乓操作的方式,循环向双口RAM1存入奇数,向双口RAM2存入偶数。并将每个RAM的数据读取两次,并将每次的结果相加,并输出。
-2、内容
(1)双口RAM是否能够正常存储和读出数据,并且数据正确;
(2)乒乓操作是否可行;
(3)是否可用循环读出;
(4)模拟输出数据累加是否正确;
备注:存入数据时钟为2M,读数据速度为62M,RAM深度为32,位宽为14位。系统时钟62M
- 3、过程
- 3.1乒乓双口RAM模块设计
- 3.1.1 双口RAM产生
利用FPGA的IP核产生双口RAM模块,其中address_a为写地址输入口,address_b为读地址输入口,clock为62M时钟输入口。Data_a为数据输入端口,enable_a为写使能信号输入口。Enable_b为读使能输入口,对a端口进行写,b端口设置为读,最后q_b为数据输出。具体下所示
Store_RAM1 data1(
.address_a(RAM_addr_w_1),
.address_b(RAM_addr_R_1),
.clock_a(clock),
.clock_b(clock),
.data_a(data_in_1),
.data_b(),
.enable_a(clk_enable_1),
.enable_b(1'b1),
.wren_a(1'b1),
.wren_b(1'b0),
.q_a(),
.q_b(data_out_1)
);
Store_RAM1 data2(
.address_a(RAM_addr_w_2),
.address_b(RAM_addr_R_2),
.clock_a(clock),
.clock_b(clock),
.data_a(data_in_2),
.data_b(),
.enable_a(clk_enable_2),
.enable_b(1'b1),
.wren_a(1'b1),
.wren_b(1'b0),
.q_a(),
.q_b(data_out_2)
);
- 3.1.2 乒乓操作2选一部分
根据乒乓操作