这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore4tx_fpga_21 [2020/07/01 10:47] zgf [三、 实验原理] |
icore4tx_fpga_21 [2022/04/01 11:39] sean |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | | **银杏科技有限公司旗下技术文档发布平台** |||| | ||
+ | |技术支持电话|**0379-69926675-801**||| | ||
+ | |技术支持邮件|Gingko@vip.163.com||| | ||
+ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
+ | | V1.0 | 2020-07-01 | gingko | 初次建立 | | ||
+ | \\ | ||
+ | \\ | ||
+ | |||
==== 实验二十一:双口RAM实验——基于双口RAM的ARM与FPGA通信 ==== | ==== 实验二十一:双口RAM实验——基于双口RAM的ARM与FPGA通信 ==== | ||
行 7: | 行 15: | ||
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | - iCore4TX 双核心板。 | + | - iCore4TX 双核心板[[https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22598974120.3.29da532fLkazHH&id=614919247574|点击购买]]。 |
- USB-CABLE(或相同功能)仿真器。 | - USB-CABLE(或相同功能)仿真器。 | ||
- JLINK(或相同功能)仿真器。 | - JLINK(或相同功能)仿真器。 | ||
行 77: | 行 85: | ||
</code> | </code> | ||
- | 例化之后,FPGA要完成对ARM传输指令的解析,这部分代码是通过case语句实现的。根据接收的指令,case语句会跳转到不同的处理状态,完成对应指令状态需要的操作,具体代码参考如下: | + | * 例化之后,FPGA要完成对ARM传输指令的解析,这部分代码是通过case语句实现的。根据接收的指令,case语句会跳转到不同的处理状态,完成对应指令状态需要的操作,具体代码参考如下: |
<code verilog> | <code verilog> | ||
case(rx_state) | case(rx_state) | ||
行 140: | 行 148: | ||
else | else | ||
begin | begin | ||
- | wr_cnt <= wr_cnt + 1'd1; | + | wr_cnt <= wr_cnt + 1'd1; |
- | end | + | end |
+ | end | ||
+ | default:begin | ||
+ | end | ||
+ | endcase | ||
+ | end | ||
+ | rx_rd_ledgth_state:begin//获取读数据长度信息,高字节在前,低字节在后 | ||
+ | case(rx_cnt) | ||
+ | 8'd0:begin | ||
+ | rd_length_r[15:8] <= receive_byte; | ||
+ | rx_cnt <= rx_cnt + 1'd1; | ||
+ | end | ||
+ | 8'd1:begin | ||
+ | rd_length_r <= {rd_length_r[15:8],receive_byte}; | ||
+ | end | ||
+ | default:begin | ||
+ | end | ||
+ | endcase | ||
+ | end | ||
+ | rx_rd_add_state:begin//获取读数据地址信息,并产生读地址信息,高字节在前 | ||
+ | case(rx_cnt) | ||
+ | 8'd0:begin | ||
+ | rd_address_r[15:8] <= receive_byte; | ||
+ | rx_cnt <= rx_cnt + 1'd1; | ||
+ | end | ||
+ | 8'd1:begin | ||
+ | rd_address_r <= {rd_address_r[15:8],receive_byte}; | ||
+ | rx_cnt <= rx_cnt + 1'd1; | ||
+ | rd_en_r <= 1'd1; | ||
+ | end | ||
+ | 8'd2:begin | ||
+ | rd_address_r <= rd_address_r + 1'd1; | ||
+ | if(rd_cnt==rd_length_r-1'd1) | ||
+ | begin | ||
+ | rd_cnt <= 12'h00; | ||
+ | rx_cnt <= rx_cnt + 1'd1; | ||
+ | else | ||
+ | begin | ||
+ | rd_cnt <= rd_cnt + 1'd1; | ||
+ | end | ||
+ | end | ||
+ | default:; | ||
+ | endcase | ||
+ | end | ||
+ | endcase | ||
</code> | </code> |