用户工具

站点工具


icore3l_fpga_16

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
icore3l_fpga_16 [2020/12/09 18:41]
zgf [三、 实验原理]
icore3l_fpga_16 [2022/03/19 15:28] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-12-09 |  gingko ​ |  初次建立 ​ |  |  V1.0  |  2020-12-09 |  gingko ​ |  初次建立 ​ | 
行 22: 行 21:
   * UART(通用异步收发器)是一种通用串行数据总线,用于异步通信,可实现全双工传输和接收,是硬件开发时常用的一种通信接口。USART(通用同步异步收发器)在UART的基础上增加了同步功能,即USART是UART的增强型,异步通信的时候和UART没有区别。UART通信具有两根信号线,一根用于发送数据,一根用于接收数据。然而数据的传输是按照字节进行传输的,因此在发送时需要将并行数据转换成串行数据,接收时需要将串行数据转换成并行数据。   * UART(通用异步收发器)是一种通用串行数据总线,用于异步通信,可实现全双工传输和接收,是硬件开发时常用的一种通信接口。USART(通用同步异步收发器)在UART的基础上增加了同步功能,即USART是UART的增强型,异步通信的时候和UART没有区别。UART通信具有两根信号线,一根用于发送数据,一根用于接收数据。然而数据的传输是按照字节进行传输的,因此在发送时需要将并行数据转换成串行数据,接收时需要将串行数据转换成并行数据。
   * UART通信传输是以帧为单位的,每帧数据有4部分构成:起始位、数据位、奇偶校验位和停止位。以8位字长的串口发送数据帧为例,其帧协议如图16-1所示,从图中可以看到,初始状态时,传输线上为高电平,在持续一个波特的低电平之后,是发送的有效数据。之后是至少一个波特高电平的停止位。   * UART通信传输是以帧为单位的,每帧数据有4部分构成:起始位、数据位、奇偶校验位和停止位。以8位字长的串口发送数据帧为例,其帧协议如图16-1所示,从图中可以看到,初始状态时,传输线上为高电平,在持续一个波特的低电平之后,是发送的有效数据。之后是至少一个波特高电平的停止位。
-{{ :​icore3l:​icore3l_fpga_16_1.png?​direct |图16-1 串口时序示意图}} ​+{{ :​icore3l:​icore3l_fpga_16_1.png?​direct&​700 ​|图16-1 串口时序示意图}} ​
  
   * 在UART通信中有一个重要的参数,即波特率,它表征了串口的传输速度,表示1秒内传输的二进制位的个数,波特率越大表示1秒内传输的二进制位数越多,反之,越少。以115200波特率为例,表示1秒钟传输115200个二进制位。本实验代码中,每16个时钟周期发送和接收一个二进制位,则时钟频率需要为1.8432M,既:​   * 在UART通信中有一个重要的参数,即波特率,它表征了串口的传输速度,表示1秒内传输的二进制位的个数,波特率越大表示1秒内传输的二进制位数越多,反之,越少。以115200波特率为例,表示1秒钟传输115200个二进制位。本实验代码中,每16个时钟周期发送和接收一个二进制位,则时钟频率需要为1.8432M,既:​
   * 115200 * 16 =1.8432M   * 115200 * 16 =1.8432M
 UART接线原则:RX↔TX、TX↔RX,如图16-2所示。 UART接线原则:RX↔TX、TX↔RX,如图16-2所示。
-{{ :​icore3l:​icore3l_fpga_16_2.png?​direct |图16-2 UART信号连接示意图}}  ​+{{ :​icore3l:​icore3l_fpga_16_2.png?​direct&​200 ​|图16-2 UART信号连接示意图}}  ​
  
 ==== 四、 代码讲解 ==== ==== 四、 代码讲解 ====
行 63: 行 62:
  tx_r <= 1'​d0;//​发送起始位  tx_r <= 1'​d0;//​发送起始位
  end  end
- 10'​d60:​begin + 10'​d60:​begin
  tx_cnt <= tx_cnt + 1'd1;  tx_cnt <= tx_cnt + 1'd1;
  tx_r <= tx_data[0];//​发送数据0位  tx_r <= tx_data[0];//​发送数据0位
行 97: 行 96:
  10'​d540:​begin  10'​d540:​begin
  tx_cnt <= tx_cnt + 1'd1;  tx_cnt <= tx_cnt + 1'd1;
- tx_r <= 1'​bz;​ //​发送校验位 + tx_r <= 1'​bz;​ //​发送校验位
  end  end
  10'​d600:​begin  10'​d600:​begin
行 138: 行 137:
  else ​  else ​
  begin  begin
- case(rx_cnt) //​判断信号线是否有变化,​RX信号线正常情况下为高电平,有低电平表示可能是起始位+ case(rx_cnt)//​判断信号线是否有变化,​RX信号线正常情况下为高电平,有低电平表示可能是起始位
  10'​d0:​begin  10'​d0:​begin
  if(!rxd)  if(!rxd)
行 145: 行 144:
  rx_cnt <= rx_cnt;   rx_cnt <= rx_cnt;
  end  end
- 10'​d30:​begin //​判断是否为起始位信号(信号线稳定后仍为低电平,表示为真正的数据起始位)+ 10'​d30:​begin//​判断是否为起始位信号(信号线稳定后仍为低电平,为真正的数据起始位)
  if(!rxd)  if(!rxd)
  rx_cnt <= rx_cnt + 1'd1;  rx_cnt <= rx_cnt + 1'd1;
行 266: 行 265:
  
 11、打开串口软件;在“设备管理器”中查看和iCore3L核心板相连的串口端口号,并将串口软件中的Port:​ 配置成此端口号(本人使用的COM4),波特率设置为115200,数据位8位;然后点击右上角的“open Port”按钮,打开端口。在发送区输入对应字符(小写字符“r、g、b”),然后点击右侧“(s)Send”按钮,即可看到开发板上FPGA-LED对应的颜色亮起;同时接收区显示接收到的字符(图16-4接收区中蓝色字样)。 11、打开串口软件;在“设备管理器”中查看和iCore3L核心板相连的串口端口号,并将串口软件中的Port:​ 配置成此端口号(本人使用的COM4),波特率设置为115200,数据位8位;然后点击右上角的“open Port”按钮,打开端口。在发送区输入对应字符(小写字符“r、g、b”),然后点击右侧“(s)Send”按钮,即可看到开发板上FPGA-LED对应的颜色亮起;同时接收区显示接收到的字符(图16-4接收区中蓝色字样)。
 +
 +12、至此,本实验成功完成。
 {{ :​icore3l:​icore3l_fpga_16_4.png?​direct |图16-4 串口软件设置及串口通信测试}}  ​ {{ :​icore3l:​icore3l_fpga_16_4.png?​direct |图16-4 串口软件设置及串口通信测试}}  ​
  
  
-12、至此,本实验成功完成。+
  
 ==== 六、 拓展实验 ==== ==== 六、 拓展实验 ====
icore3l_fpga_16.1607510495.txt.gz · 最后更改: 2020/12/09 18:41 由 zgf