很高兴你能坚持经常过来支持笔者:冯瑞明,今天就来说说关于vhdl分频器的作用原理,vhdl分频器是什么意思,还有关于分频器,作用,原理等一系列的内容,如果你是老司机,你可能觉得很简单,但如果你是新手,你可能就不这么想了。
题简介:
内容:使用Verilog编写一个分频器;
来源:仿真得出,暂未实践;
作用:使用Verilog编写一个分频器;
仿真环境:Quartus 11.0;
日期:2019-03-15;
=====================分割线========================
立题详解:
对CPLD或FPGA而言,暂时接触过的开发语言只有VHDL和Verilog;
个人而言,见到很多同事喜欢使用Verilog,因此也随波逐流,开始复习Verilog,本次使用Verilog编写一个分频器;思路很简单,实现2个分频器及占空比控制;
网上资料很多,属于最基础的入门级代码,和学习C/C++时,学习输出“printf(“hello world”)”差不多,当然,后续我们还是需要不断进步,做到“printf(“\nhello world\n”)”、“cout<<“hello world”<<endl”等等内容;
1、编写代码
对Verilog代码如下:
module tester(clk,rst_n,fm_1,fm_2);
input wire clk;//clock signal
input rst_n; // reset signal
output fm_1; //out signal for process 1
output fm_2; //out signal for process 2
reg [7:0]cnt_1;//cnt for process 1
reg [7:0]cnt_2;//cnt for process 2
always @(posedge clk or negedge rst_n)
if(!rst_n) cnt_1 <= 8’d0;
else if(cnt_1 <= 8’d255) cnt_1 <= cnt_1 + 1;
else cnt_1 <= 8’d0;
assign fm_1 = (cnt_1 <= 128)? 1’b1:1’b0;
always @(posedge clk or negedge rst_n)
if(!rst_n) cnt_2 <= 8’d0;
else if(cnt_2 <= 8’d49) cnt_2 <= cnt_2 + 1;
else cnt_2 <= 8’d0;
assign fm_2 = (cnt_2 <= 25)? 1’b1:1’b0;
endmodule
如上所示,通过代码构建2个分频计数器,见解如下:
i)、fm_1的分频系数为PSC1=255+1=256;占空比约为:128/256=50%;
ii)、fm_2的分频系数为PSC1=49+1=50;占空比约为:25/50=50%;
重点:可通过修改” if(cnt_2 <= 8’dxx)”的”xx”修改分频系数;修改cnt_1/cnt_2的值修改占空比;
需特别注意:前面定义“reg类型”时,已经确定了数据值范围,如上例中,使用为“reg [7:0]cnt_1;”,即其只有8bit数据,最大值为2^8=256;若分频系数超过十进制的256,将会出现数据溢出错误;
2、编译代码
编译结果如下所示:
其中指示了使用的主控FPGA芯片、Logice Element使用比例等信息;
3、查看RTL级
构建而成的RTL视图如下所示:
如上图所示,内部通过综合后,得出对应的RTL级连接图;
4、分配PIN管脚
然后分配FPGA-Pin管脚,此处随意分配,如下所示:
5、再次编译
编译结果如下所示:
6、再次查看RTL级
此步骤不为必要步骤,视个人习惯而定;构从的RTL视图如下所示:
7、后续介绍:
至此,对简单的代码,可以直接使用下载器进行下载实测;正规方法,应该对其进行编写Test Bench进行仿真分析;此内容为后续介绍;
好了,今天我们就说到这里,希望这篇文章可以帮到你,认真看完了这篇vhdl分频器的作用原理「最新vhdl分频器是什么意思」文章,感觉收获很多,可以帮忙分享一下。
本文发布者:万事通,不代表寂寞网立场,转载请注明出处:https://www.jimowang.com/p/14643.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jimowangmail@126.com 举报,一经查实,本站将立刻删除。