这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
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> | ||