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进行仿真分析;此内容为后续介绍;

(0)
打赏 微信扫一扫 微信扫一扫

相关推荐

本文内容由互联网用户自发贡献,该文观点仅代表作者本人,不代表万网时代立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qulianxi@foxmail.com 举报,一经查实,本站将立刻删除。