名称:可通过UART串口修改PWM占空比设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
可通过UART串口修改PWM占空比
1、设计UART串口接收模块,接收串口数据
2、设计PWM波产生模块,产生的PWM占空比可调
3、使用串口接收数据调整占空比
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:
//将接收的串行数据并行输出 //波特率为9600bit/s //带有奇偶校验位 module?UART_rx(clk,rst_p,rs232_rx,receive_data); input??????clk;//1M input??????rst_p;//高电平复位 input??????rs232_rx;//串行接收数据??????? output?[7:0]?receive_data;//接收数据 reg?[7:0]?receive_data;//接收数据 wire[15:0]??bps_cnt;//波特率分频计数器 wire[15:0]??bps_cnt_mid;//波特率分频计数器/2 assign?bps_cnt=16'd104;//1000000/9600=104 assign?bps_cnt_mid=16'd52; reg???????rx_mid=0;?????????????????????????????? reg???????rx_en=0; reg[15:0]??cnt=16'd0; reg[3:0]??num=4'd0; reg?rx_r0,rx_r1;? always?@(posedge?clk?or?posedge?rst_p)??????//rs232_rx下降沿检测 if(rst_p)//复位 ???begin ????rx_r0<=1'b1; ????rx_r1<=1'b1; ???end else//D触发器打2拍 ???begin ????rx_r0<=rs232_rx;//延迟1时钟 ????rx_r1<=rx_r0;//延迟2时钟 ???end wire????rx_req;//rs232_rx下降沿信号 assign??rx_req?=?~rx_r0?&?rx_r1;?//rs232_rx下降沿,rx有下降沿表示起始位 wire????rx_done;//接收完成信号 assign??rx_done?=?(cnt==bps_cnt_mid?&&?num==4'd10);?////1位起始位、8位数据位、1位校验位,停止位1位,共11位,即0~10。 always?@(posedge?clk?or?posedge?rst_p)????????????? if(rst_p) ???rx_en<=1'b0; else ???if(rx_req)//rs232_rx下降沿信号 ??????rx_en<=1'b1;//启动接收 ???else ??????if(rx_done)//接收完成 ?????????rx_en<=1'b0;//停止接收 ??????else ?????????rx_en<=rx_en; always?@(posedge?clk?or?posedge?rst_p) if(rst_p) ???rx_mid<=1'b0; else ???if(rx_en)//启动接收 ??????if(cnt==bps_cnt_mid) ??????rx_mid<=1'b1;//接收时,在信号中间采样,即计数值的一半处 ???else ??????rx_mid<=1'b0; ???else ??????rx_mid<=1'b0; always?@(posedge?clk?or?posedge?rst_p) if(rst_p) ???cnt<=16'd0; else ???if(rx_done)//接收完成 ??????cnt<=16'd0; else ?????if(rx_en)//接收时 ???????if(cnt==bps_cnt)//按波特率计数 ??????????cnt<=16'd0; ???????else ?????????cnt<=cnt+16'b1;//计数 ?????else ???????cnt<=16'd0;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1105
阅读全文
1447