要求

串口助手功能实现,5个按键,按一次输出1种波特率的信号及他的一半波特率的信号,再按一次输出另一种信号,依次对应。

代码设计

## 分频模块
module frequency(  input clk_50m,input rst,  output BPS_CLK1,//输出为不同波特率的信号output BPS_CLK2,output BPS_CLK3,output BPS_CLK4,output BPS_CLK5,output BPS_CLK6,output BPS_CLK7,output BPS_CLK8,output BPS_CLK9,output BPS_CLK10);reg [12:0]cnt_bps1=0;reg [12:0]cnt_bps2=0;reg [12:0]cnt_bps3=0;reg [12:0]cnt_bps4=0;reg [12:0]cnt_bps5=0;reg [12:0]cnt_bps6=0;reg [12:0]cnt_bps7=0;always@(posedge clk_50m or posedge rst)if(rst)                                                    //复位信号cnt_bps1<=0;else                                          if(cnt_bps1==13'd5207)                       //  50_000_000/9600cnt_bps1<=0;elsecnt_bps1<=cnt_bps1+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps2<=0;elseif(cnt_bps2==13'd2603)                //19200cnt_bps2<=0;elsecnt_bps2<=cnt_bps2+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps3<=0;elseif(cnt_bps3==13'd1301)                  //38400cnt_bps3<=0;elsecnt_bps3<=cnt_bps3+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps4<=0;elseif(cnt_bps4==13'd867)           //57600cnt_bps4<=0;elsecnt_bps4<=cnt_bps4+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps5<=0;elseif(cnt_bps5==13'd433)cnt_bps5<=0;elsecnt_bps5<=cnt_bps5+1;always@(posedge clk_50m or posedge rst)if(rst)cnt_bps6<=0;elseif(cnt_bps6==13'd1301)        //115200cnt_bps6<=0;elsecnt_bps6<=cnt_bps6+1;
always@(posedge clk_50m or posedge rst)if(rst)cnt_bps7<=0;elseif(cnt_bps7==13'd215)cnt_bps7<=0;elsecnt_bps7<=cnt_bps7+1;   assign BPS_CLK1=(cnt_bps1==13'd2604)?1:0;assign BPS_CLK2=(cnt_bps2==13'd1302)?1:0;assign BPS_CLK3=(cnt_bps3==13'd868)?1:0;assign BPS_CLK4=(cnt_bps4==13'd434)?1:0;assign BPS_CLK5=(cnt_bps5==13'd217)?1:0;assign BPS_CLK6=(cnt_bps2==13'd1302)?1:0;assign BPS_CLK7=(cnt_bps6==13'd651)?1:0;assign BPS_CLK8=(cnt_bps4==13'd434)?1:0;assign BPS_CLK9=(cnt_bps5==13'd217)?1:0;assign BPS_CLK10=(cnt_bps7==13'd018)?1:0;
endmodule

七个always语句里面分别产生对应波特率信号的计数。比如要产生9600的就应该是计数(系统时钟50m除以9600)下。
## 按键模块

module key(input clk_50m,input key,input rst,input BPS_CLK1,input BPS_CLK2,input BPS_CLK3,input BPS_CLK4,input BPS_CLK5,input BPS_CLK6,input BPS_CLK7,input BPS_CLK8,input BPS_CLK9,input BPS_CLK10,output reg sent_clk=0,output reg res_clk=0);reg [2:0] key_cn=0;always@(posedge clk_50m or posedge rst)   //检测按键次数,用于转换输出不同的波特率if(rst)key_cn<=0;elseif(key==1)if(key_cn==4)key_cn<=0;elsekey_cn<=key_cn+1;always@(posedge clk_50m)                       //根据按键次数输出不同波特率的信号及它的一半case(key_cn)3'd0:begin sent_clk<=BPS_CLK1;res_clk<=BPS_CLK6; end3'd1:begin sent_clk<=BPS_CLK2;res_clk<=BPS_CLK7; end3'd2:begin sent_clk<=BPS_CLK3;res_clk<=BPS_CLK8; end3'd3:begin sent_clk<=BPS_CLK4;res_clk<=BPS_CLK9; end3'd4:begin sent_clk<=BPS_CLK5;res_clk<=BPS_CLK10; enddefault:begin sent_clk<=BPS_CLK1;res_clk<=BPS_CLK6; endendcaseendmodule

按键计数,把按键当作使能信号,当按键按下,按键计数器计数,之后case语句判断按键次数,然后赋值输出对应波特率及他的一半;输出为sen_clk与rec_clk。也就是按一次键会产生两种波特率信号。
## 顶层文件

module top(input clk_50m,input key,input rst,output sent_clk,output res_clk);
wire BPS_CLK1,BPS_CLK2,BPS_CLK3,BPS_CLK4,BPS_CLK5,BPS_CLK6,BPS_CLK7,BPS_CLK8,BPS_CLK9,BPS_CLK10;wire BPS1,BPS2,BPS3,BPS4,BPS5,BPS6,BPS7,BPS8,BPS9,BPS10;frequency i1 (.clk_50m(clk_50m), .rst(rst), .BPS_CLK1(BPS1), .BPS_CLK2(BPS2), .BPS_CLK3(BPS3), .BPS_CLK4(BPS4), .BPS_CLK5(BPS5), .BPS_CLK6(BPS6), .BPS_CLK7(BPS7), .BPS_CLK8(BPS8), .BPS_CLK9(BPS9), .BPS_CLK10(BPS10));key i2(.clk_50m(clk_50m), .key(key), .BPS_CLK1(BPS1), .BPS_CLK2(BPS2), .BPS_CLK3(BPS3), .BPS_CLK4(BPS4), .BPS_CLK5(BPS5), .BPS_CLK6(BPS6), .BPS_CLK7(BPS7), .BPS_CLK8(BPS8), .BPS_CLK9(BPS9), .BPS_CLK10(BPS10), .sent_clk(sent_clk), .res_clk(res_clk));endmodule
## 仿真文件
module uart_clk;// Inputsreg clk_50m;reg key;reg rst;// Outputswire sent_clk;wire res_clk;// Instantiate the Unit Under Test (UUT)top uut (.clk_50m(clk_50m), .key(key), .rst(rst), .sent_clk(sent_clk), .res_clk(res_clk));initial begin// Initialize Inputsclk_50m = 0;key = 0;rst = 0;end
always #10 clk_50m=!clk_50m;
alwaysbeginkey<=1;#20;key<=0;#500000;endendmodule

仿真波形

FPGA入门实验之串口发送相关推荐

  1. FPGA入门实验-基于状态机实现串口回环收发

    任务目标 基于状态机实现串口回环收发.最近生产实习的FPGA培训课程内容,还是挺简单的.具体原理其他文章应该都烂大街了,重点是状态机的写法,还是很少博主写,没怎么看到,基本上都是时序机写的模块功能. ...

  2. FPGA入门实验-寻迹小车的实现

    任务目标 寻迹小车的实现.用的红外寻迹模块,记得要把模块可调电阻参数调好. 实现代码 电机模块代码motor.v: module MOTOR(input sysclk,input rst_n,inpu ...

  3. CC2530基础实验四 串口通信

    一.任务要求 编写程序实现实验板定期向PC机串口发送字符串"Hello ! I am CC2530 .\n".实验板开机后按照设定的时间间隔,不断地向PC及发送字符串,报告自己的状 ...

  4. 【入门学习四】基于 FPGA 使用 Verilog 实现串口回传通信代码及原理讲解

    目录 一.相关知识 二.模块设计 三.代码设计 3.1 串口接收模块 3.2 控制模块 3.3 串口发送模块 四.FIFO 核引用 五.管脚定义及结果展示 上一篇博文:[入门学习三]基于 FPGA 使 ...

  5. 三、E906移植----FPGA生成可用的比特流并实现串口发送

    三.E906移植----FPGA生成可用的比特流并实现串口发送 书接上回,第二篇把基本工程搭建了起来,跑了下综合看了看.本文就开始具体的修改了,连蒙带猜,修修补补,最终完成了板上串口发送"H ...

  6. ARTIX-7 XC7A35T实验项目之 串口发送

    刷题推荐 链接: Verilog刷题 1,实验简介 UART关键参数及时序图 UART通信在使用前需要做多项设置,最常见的设置包括数据位数.波特率大小.奇偶校验类型和停止位数. 数据位(Data bi ...

  7. FPGA学习之串口发送模块设计与验证

    FPGA学习之串口发送模块设计与验证 1.实验目的: 实现一个串口输出,通过上位机PC查看接收到的是否是串口发送的数据. 2.实验介绍: 学习UART通信原理及其硬件电路设计,使用FPGA实现UART ...

  8. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  9. FPGA 电路开发入门实验

    FPGA 电路开发入门实验 第0章:基础知识 如图1,本实验使用实验板为altera DE0,板子型号为Cyclone Ⅲ, EP3C16F484C6,编译软件为QuartusⅡ9.0. 图 1 Qu ...

最新文章

  1. mac通过tree源码编译安装tree
  2. jmap 文件解析_[Java基础] 使用JMAP dump及分析dump文件
  3. JAVA生成随机字符串方法
  4. 14行代码AC_SCU 4440 Rectangle(公式+矩阵对称性)
  5. HashMap 的 7 种遍历方式与性能分析!
  6. 五个案例“熄灭”Nginx漏洞隐患
  7. VS Tips (Basic part)
  8. 5.4 continue,break跳出循环
  9. python识别视频中火焰_监控视频中火焰检测算法
  10. 叉乘点乘混合运算公式_《3D数学基础》提炼总结(四)向量运算(后)
  11. Python-从txt中获取所有带有书名号的内容,并去除重复内容
  12. php判断移动端和pc端访问_PHP函数判断移动端和PC端
  13. 手绘机器学习全流程,教你如何实现模型训练
  14. Go技术日报(2021-11-16/17)——gRPC的错误处理实践
  15. 导出 MySQL 数据库表结构设计文档
  16. 建筑央企工程项目数字化管理整体解决方案
  17. 初识HTTP中的Referer
  18. Camshift知识点
  19. 网络安全:渗透流程之信息收集
  20. 漏洞解决方案-认证绕过

热门文章

  1. 【视频分享】尚硅谷Java视频教程_Jenkins视频教程
  2. 启动tomcat出来两个窗口 NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-
  3. altera fpga大小如何衡量_Xilinx和Altera FPGA的基本逻辑单元对比
  4. 1000杯水中取一杯毒水,鼠兄遭殃
  5. 3dmax 2016 2015 2014 2013 vary渲染 视频教程 从入门到精通
  6. SMART目标管理方法
  7. 【技术美术】千人千面如何炼成 技术讲解捏脸系统设计原理
  8. 最火的python视频_超火Python400集视频,116-248集思维导图视频介绍(第二季)
  9. 中职计算机英语教师教学总结,中职教师工作总结
  10. Unity报错之【ArgumentOutOfRangeException: Index was out of range........】