pwm 采用任意宽度的输入值,并创建只有一位宽度的输出。使用自由运行计数器的 pwm,这是能做的最简单的 pwm。
module pwm( input clk, input rst_n, input [3:0] pwm_in, output pwm_out);
reg [3:0] cnt;always @(posedge clk or negedge rst_n) if(!rst_n) cnt《=0; else cnt 《= cnt + 1‘b1; // free-running counter
assign pwm_out = (pwm_in 》 cnt)?1’b1:1‘b0; // comparatorendmodule
选择了一个4位的 pwm 这里,所以 pwm 周期是16。输入可以从0到15,因此 pwm 输出比从0% 到15/16 = 93% 。如果需要能够达到100% ,输入需要有一个额外的bit位。
这段代码工作得很好,尽管当前形式的代码有点幼稚,因为输入必须是固定的(或者只有当计数器溢出 = 返回到0时才会更改)。否则输出将出现故障。因此,很可能需要一些额外的逻辑(通常是在正确的时间捕获输入的闩锁)
使用可加载的上下计数器的 pwm,这是一个稍微复杂一点的设计。
module pwm2( input clk, input rst_n, input [3:0] pwm_in, output pwm_out);
reg [3:0] cnt;reg cnt_dir; // 0 to count up, 1 to count downwire [3:0] cnt_next = cnt_dir ? cnt-1’b1 : cnt+1‘b1;wire cnt_end = cnt_dir ? cnt==4’b0000 : cnt==4‘b1111;
always @(posedge clk or negedge rst_n ) if(!rst_n) cnt 《= 0; else cnt 《= cnt_end ? pwm_in : cnt_next;always @(posedge clk or negedge rst_n) if(!rst_n) cnt_dir《=1’b0; else cnt_dir 《= cnt_dir ^ cnt_end;assign pwm_out = cnt_dir;endmodule
它使用一个可加载的上下计数器,不需要输出比较器。有趣的是,它并不完全等同于第一个设计,因为输出周期有17个状态而不是16个(输出从1/17 = 6% 到16/17 = 94%)。
京东方2023年前三季度实现营业收入1265.15亿元
前端工程师转型架构师的经历
移动端VIN码识别技术为车辆估值平台带来了便利
芯闻3分钟:三星内部源代码泄露,中国政府加快破解“缺芯少魂”
LEM国产替代|年营收超1700亿元,芯森传感器助力中国机器人行业走向更多场景
浅析基于verilog如何实现PWM DAC
电脑配件有哪些不能轻易拆卸
Netfiler框架将针对AVX2指令集进行优化 基于霄龙7402处理器的服务器实测性能提升最多420%
基于TDA1524的带音调控制的立体声前置放大器电路
为什么区块链很重要它可以做什么
【应用场景】安科瑞智能仪表在密集母线行业中的应用
pcb焊盘设计工艺流程
开关电源和稳压电源到底有什么区别
英特尔首席执行官表达了对芯片资金及其出口管制的担忧
ServTech收购意大利VR软件公司 并将其更名为Vection
重庆两江新区集成电路产业上半年营收增长8倍 构建起了覆盖全产业链的电子产业集群
电瓶修复—电池的种类解释
VR技术对于戒毒的治疗有什么特有的优势和潜力吗
基于模型的嵌入式C代码的实现与验证
门禁系统哪个品牌好_门禁系统十大品牌排名