【iCore1S 双核心板_FPGA】例程十七:基于双口RAM的ARM+FPGA数据存取实验
实验现象:

核心代码:
module DUAL_PORT_RAM(
input CLK_12M,
inout WR,
input RD,
input CS0,
input [:]A,
inout [:]DB,
output FPGA_LEDR,
output FPGA_LEDG,
output FPGA_LEDB
);
//-------------------------------rst_n---------------------------------//
reg rst_n;
reg [:]cnt_rst; always@(posedge CLK_12M)
begin
if(cnt_rst=='d10)
begin
rst_n <= 'd1;
cnt_rst <= 'd10;
end
else cnt_rst <= cnt_rst + 'd1;
end //---------------------------------PLL--------------------------------//
//实例化PLL
my_pll u1(
.inclk0(CLK_12M),
.c0(PLL_48M)
); //--------------------------------RAM---------------------------------//
//实例化双口ram
wire [:]a_dataout;
wire [:]b_dataout; my_ram u2(
.address_a(a_addr),
.address_b(A),
.data_a(a_datain),
.data_b(DB),
.clock_a(!a_clk),
.clock_b(b_clk),
.wren_a(a_wren),
.wren_b('d0),
.rden_a(a_rden),
.rden_b(!rd),
.q_a(a_dataout),
.q_b(b_dataout)
); //-------------------------------delay-------------------------------//
//对CLK_12M做延时处理
reg clk1,clk2; always@(posedge PLL_48M or negedge rst_n)
begin
if(!rst_n)
begin
clk1 <= 'd0;
clk2 <= 'd0;
end
else
begin
{clk2,clk1} <= {clk1,CLK_12M};
end
end wire a_clk = (CLK_12M & clk2); //---------------------------------ram_cnt----------------------------//
//ram地址数据计数器
reg [:]cnt_addr; always@(posedge CLK_12M or negedge rst_n)
begin
if(!rst_n)
begin
cnt_addr <= 'd0;
end
else if(cnt_addr=='d511)
begin
cnt_addr <= 'd0;
end
else cnt_addr <= cnt_addr + 'd1;
end //------------------------------ram_a wr&rd----------------------------//
reg a_wren,a_rden;
reg [:]a_datain;
reg [:]a_addr; always@(posedge a_clk or negedge rst_n)
begin
if(!rst_n)
begin
a_wren <= 'd0;
a_rden <= 'd0;
a_datain <= 'd0;
a_addr <= 'd0;
end
else if(cnt_addr >= 'd0 && cnt_addr <= 10'd255)
begin
a_wren <= 'd1;
a_datain <= cnt_addr;
a_addr <= cnt_addr;
a_rden <= 'd0;
end
else if(cnt_addr>='d256 && cnt_addr <= 1'd511)
begin
a_rden <= 'd1;
a_addr <= cnt_addr - 'd256;
a_wren <= 'd0;
end
end //------------------------------a_ram_error---------------------------//
//判断读取地址与输出数据是否相等。相等,绿灯亮;不相等,红灯亮。
reg error;
reg [:]led; always@(negedge clk1 or negedge rst_n)
begin
if(!rst_n)
begin
error <= 'd0;
end
else if(a_wren || a_dataout == a_addr)
begin
error <= 'd0;
led <= 'b101;
end
else
begin
error <= 'd1;
led <= 'b011;
end
end assign {FPGA_LEDR,FPGA_LEDG,FPGA_LEDB} = led; //-------------------------------b_ram_rd-----------------------------//
//控制ram_b的读取功能,当读信号来临时,读取数据发送到FSMC总线上
wire wr = (CS0 | WR );
wire rd = (CS0 | RD);
reg wr_clk1,wr_clk2; always@(posedge PLL_48M or negedge rst_n)
begin
if(!rst_n)
begin
wr_clk1 <= 'd1;
wr_clk2 <= 'd1;
end
else
begin
{wr_clk2,wr_clk1} <= {wr_clk1,wr};
end
end
wire b_clk = (!wr_clk2 | !rd);
assign DB = !rd ? b_dataout : 'hzzzz; //------------------------------endmodule-----------------------------//
endmodule
实验方法及指导书:
链接:http://pan.baidu.com/s/1hsEeYxe 密码:004h

【iCore1S 双核心板_FPGA】例程十七:基于双口RAM的ARM+FPGA数据存取实验的更多相关文章
- 【iCore1S 双核心板_FPGA】例程十二:基于单口RAM的ARM+FPGA数据存取实验
实验现象: 核心代码: module single_port_ram( input CLK_12M, input WR, input RD, input CS0, inout [:]DB, input ...
- 【iCore4 双核心板_FPGA】例程十五:基于单口RAM的ARM+FPGA数据存取实验
实验现象: 写RAM命令格式:write:地址(0-255),数据(0-65535)\cr\lf 读RAM命令格式:read:地址(0-255)\cr\lf 核心代码: int main(void) ...
- 【iCore3 双核心板_FPGA】实验十八:基于单口RAM的ARM+FPGA数据存取实验
实验指导书及代码包下载: http://pan.baidu.com/s/1i58Ssvz iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore4 双核心板_FPGA】例程十六:基于双口RAM的ARM+FPGA数据存取实验
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int address,data; ; ]; ]; char *p; /* US ...
- 【iCore3 双核心板_FPGA】实验十九:基于双口RAM的ARM+FPGA数据存取实验
实验指导书及代码包下载: http://pan.baidu.com/s/1pLReIc7 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore4 双核心板_FPGA】例程十七:基于FIFO的ARM+FPGA数据存取实验
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int fsmc_read_data; ; ]; ]; char *p; /* ...
- 【iCore3 双核心板】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
实验指导书及代码包下载: http://pan.baidu.com/s/1qXt1L0o iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore3 双核心板_FPGA】实验二十:基于FIFO的ARM+FPGA数据存取实验
实验指导书及代码包下载: http://pan.baidu.com/s/1cmisnO iCore3 购买链接: https://item.taobao.com/item.htm?id=5242294 ...
- 【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入
实验现象: iCore1s 双核心板上与FPGA相连的三色LED(PCB上标示为FPGA·LED),按键按下红灯点亮,松开按键红灯熄灭. 核心源代码: module KEY( input CLK_12 ...
随机推荐
- C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。
除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2:而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000. 取余运算中注意: 该运算只适 ...
- [SPOJ-CIRU]The area of the union of circles/[BZOJ2178]圆的面积并
[SPOJ-CIRU]The area of the union of circles/[BZOJ2178]圆的面积并 题目大意: 求\(n(n\le1000)\)个圆的面积并. 思路: 对于一个\( ...
- NOIP复习篇
NOIP复习篇---枚举 --------------------------------------------------------------------------------------- ...
- Coins [POJ1742] [DP]
Description 给出硬币面额及每种硬币的个数,求从1到m能凑出面额的个数. Input 多组数据,每组数据前两个数字为n,m.n表示硬币种类数,m为最大面额,之后前n个数为每种硬币的面额, ...
- react native webview 不能滑动页面
用RN 写Android的时候,webview点击正常,但是不能滑动,或者滑动很艰难.调试不报错,inspect一切正常. 遍查网络无良方, 最后发现其他同事在最外层套了个这东西: Touchable ...
- JS_高程4.变量,作用域和内存问题(3)垃圾收集
JavaScript的自动垃圾收集机制 执行环境会负责管理代码执行过程中使用的内存,编写JavaScript程序时,所需内存的分配以及无用内存的回收完全实现自动管理. 原理: 找出那些不再继续使用的变 ...
- IPAddress.Any 解决本地ip和服务器ip切换问题
IPAddress.Any表示本机ip,换言之,如果服务器绑定此地址,则表示侦听本机所有ip对应的那个端口(本机可能有多个ip或只有一个ip)IPAddress.Any微软给出的解释是:Provide ...
- Deepin 15.4 破解安装 SecureFX-7.3 失败
参考先前的文章(Ubuntu 14 安装并破解SSH工具 SecureCRT),破解安装 SecureCRT-7.3 成功,但是破解安装 SecureFX-7.3 时就一直报错: Insuffici ...
- ASP.NET Core托管和部署Linux实操演练手册
一.课程介绍 ASP.NET Core 是一种全新的跨平台开源 .NET 框架,能够在 IIS.Nginx.Apache.Docker 上进行托管或在自己的进程中进行自托管. 作为一个.NET Web ...
- javap 指令集
栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型 ...