首页 > 热点 >

vhdl分频器的作用原理(VHDL分频器的作用)

发布时间:2022-12-11 16:16:56来源:网络转载
题简介:

内容:使用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、编译代码

编译结果如下所示:

vhdl分频器的作用原理

其中指示了使用的主控FPGA芯片、Logice Element使用比例等信息;

3、查看RTL级

构建而成的RTL视图如下所示:

vhdl分频器的作用原理

如上图所示,内部通过综合后,得出对应的RTL级连接图;

4、分配PIN管脚

然后分配FPGA-Pin管脚,此处随意分配,如下所示:

vhdl分频器的作用原理

5、再次编译

编译结果如下所示:

vhdl分频器的作用原理

6、再次查看RTL级

此步骤不为必要步骤,视个人习惯而定;构从的RTL视图如下所示:

vhdl分频器的作用原理

7、后续介绍:

至此,对简单的代码,可以直接使用下载器进行下载实测;正规方法,应该对其进行编写Test Bench进行仿真分析;此内容为后续介绍;



(责编: xiaoxiao)

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。