名称:可通过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
阅读全文
1776