用户工具

站点工具


icore3_fpga_16

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
icore3_fpga_16 [2020/12/18 10:01]
zgf [四、代码讲解]
icore3_fpga_16 [2022/03/18 15:44] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2019-12-25 ​ |  gingko |  初次建立 ​ | |  V1.0  |  2019-12-25 ​ |  gingko |  初次建立 ​ |
行 37: 行 36:
   * 由ARM提供的数据和SCLK是同步的,那么FPGA接收数据的触发信号可以选用SCLK。阅读过STM32F407手册能够发现,它的SPI总线发送数据时,是先发送高位,再发送低位的。因此,FPGA接收到的数据也是先接收到高位数据,再接收到低位数据。这里可以采用位移操作,将数据依次存入寄存器的相应位。代码实现如下所示。   * 由ARM提供的数据和SCLK是同步的,那么FPGA接收数据的触发信号可以选用SCLK。阅读过STM32F407手册能够发现,它的SPI总线发送数据时,是先发送高位,再发送低位的。因此,FPGA接收到的数据也是先接收到高位数据,再接收到低位数据。这里可以采用位移操作,将数据依次存入寄存器的相应位。代码实现如下所示。
 <code verilog> <code verilog>
-always@(posedge spi_clk or negedge rst_n)+    ​always@(posedge spi_clk or negedge rst_n)
  if(!rst_n)  if(!rst_n)
  data_in<​=40'​d0;​  data_in<​=40'​d0;​
行 47: 行 46:
   * 为了验证SPI通信的正确性,可以通过点亮LED来具象化实验效果。iCore3板卡上FPGA连接有三色LED。那么,可以通过发送“ledr、ledg、ledb”指令,点亮LED相应色彩,进行程序正确性的验证。由于这些指令是ASCII码格式,而SPI传输的是二进制模式,所以FPGA进行接收指令判断时,对比的为指令的二进制值。为了判断数据是否接收完毕,代码中做了“回车”指令检测,既检测到“回车”指令的ASCII码之后,判断为数据接收完毕,然后将接收数据“回车”指令之前的数据和LED点亮指令做对比,从而控制三色LED的显示。代码实现如下:   * 为了验证SPI通信的正确性,可以通过点亮LED来具象化实验效果。iCore3板卡上FPGA连接有三色LED。那么,可以通过发送“ledr、ledg、ledb”指令,点亮LED相应色彩,进行程序正确性的验证。由于这些指令是ASCII码格式,而SPI传输的是二进制模式,所以FPGA进行接收指令判断时,对比的为指令的二进制值。为了判断数据是否接收完毕,代码中做了“回车”指令检测,既检测到“回车”指令的ASCII码之后,判断为数据接收完毕,然后将接收数据“回车”指令之前的数据和LED点亮指令做对比,从而控制三色LED的显示。代码实现如下:
 <code verilog> <code verilog>
- always@(posedge spi_clk or negedge rst_n) +        ​always@(posedge spi_clk or negedge rst_n) 
- if(!rst_n)+     ​if(!rst_n)
  data<​=32'​d0;​  data<​=32'​d0;​
- else if(data_in[7:​0] == 8'​d13)//​“回车”键对应的ASCII码的值为8‘d13+     ​else if(data_in[7:​0] == 8'​d13)//​“回车”键对应的ASCII码的值为8‘d13
  data<​=data_in>>​8;//​取回车键之前的值  data<​=data_in>>​8;//​取回车键之前的值
       else       else
行 56: 行 55:
  //​对比接收数据//​  //​对比接收数据//​
  reg [2:0]led;   reg [2:0]led;
- always@(posedge CLK_25M or negedge rst_n)+        ​always@(posedge CLK_25M or negedge rst_n)
  if(!rst_n)  if(!rst_n)
     led <= 3'​b111;​     led <= 3'​b111;​
icore3_fpga_16.1608256882.txt.gz · 最后更改: 2020/12/18 10:01 由 zgf