FPGA学习笔记(1)——单通道PWM输出与Modelsim仿真

编程入门 行业动态 更新时间:2024-10-27 17:16:40

FPGA<a href=https://www.elefans.com/category/jswz/34/1770117.html style=学习笔记(1)——单通道PWM输出与Modelsim仿真"/>

FPGA学习笔记(1)——单通道PWM输出与Modelsim仿真

- [1 ] 前言

本人学生党一枚,因个人兴趣爱好以及导师的项目需求等原因,半年前便开始着手学习FPGA。但因种种原因,时至3天前才得以真正拿出黑金的AX309——xilinx spartan6系列芯片的开发板从零开始学习FPGA。先前,通过师兄的建议,买了两本入门必备的参考书籍,夏宇闻的《Verilog数字系统设计教程 第四版》和韩彬的《FPGA设计技巧与案例开发详解》。

从半年前到现在,夏宇闻的那本书我断断续续的只看了前面一些基础部分:模块的结构、数据类型、条件语句、循环语句等,算是对Verilog的基本语法有初步的了解,打算在后期程序的编写过程中不断地翻书,查书逐步学习,逐步强化。书都看烂了也不如通过实际操作来提升自己的能力快。总的来说有C语言的基础,Verilog还是很容易上手的,流水灯的例程、按键的例程也能轻易的看懂。代码风格与工程经验借鉴可以参照韩彬的那本书,这是一本很不错的书籍,强烈推荐,针对Altera FPGA的,虽然我用的是xilinx的。

- [ 2] 正式动手
3天前开始拿出珍藏已久的AX309开发板,在装好了ISE和Modelsim软件后开始照着黑金给的PDF教程逐步建立工程、代码ctrl+c、ctrl+v、编译、引脚定义、仿真、下载、流水灯开始流水了。总之照着教程来一切很顺利,但可悲的是,一套行云流水的操作后大脑却是一片空白,啥都没记住。
今天决定自己从头开始,动手写一个单通道PWM输出的程序,从参考别人的程序自己重现(Notepad++先写好程序)到建立工程到仿真再到下载验证。一共走了3遍,才算抛弃了PDF教程,记熟了流程。为了防止我这间歇性失忆的大脑在关键时刻短路,我把简历工程到仿真的过程记录下来。

- [ 3] 工程建立
第一步打开ISE软件,选择界面左上角File→New Project 。
第二步 建立工程文件夹,参照箭头指示来填写内容,文件夹及文件名称最好不要出现中文。
第三步 开发板数据配置。可根据自己的开发板进行选择填写。


第四步 建立源文档 Project→New source

选择Verilog Moudle,填写源程序文件名称,然后next→next→Finish,中间的引脚配置可以先不管,后期修改。



第五步 工程建立完成后把Notepad++写好的代码复制过来(参考)。代码如下: 头文件是用了韩彬老师书里所整理的。

/*------------------------------------------------------------------\\\|///\\ - - //( @ @ )
+-------------------------oOOo-(_)-oOOo----------------------------+
CONFIDENTIAL IN CONFIDENCE
This confidential and proprietary software may be only used as authorized
by a licensing agreement from Zhang (****).
In the event of publication,the following notice is applicable:
Copyright(C)2019-2020 Zhang Corporation
The entire notice above must be reproduced on all authorized copies.
Author                    :          Zhang
Technology blogs          :
Email Address             :          18713597390@163
Filename                  :          Counter_Design.v
Data                      :          2019-8-5
Description               :          generate one channel pwm
Modification              :
Data           By           Version           Change Description
=====================================================================
19/8/5        Zhang           1.0                  Original
---------------------------------------------------------------------
|                               Oooo
+-------------------------oooO--(  )--------------------------------+(  )   ) /\ (   (_/\_)-------------------------------------------------------------------*/
`timescale 1ns / 1ps
module pwm_test(input        clk,               //systerm clock  50MHzinput 	     rst_n,             //reset keyoutput reg   pwm                //two channel pwm output);
parameter   period = 6'd50;                //pwm_period = 50MHz/period   5Hz 0.2s
parameter   h_time = 6'd25;                 //duty cycle = h_time/period   0.1s 50%鍗犵┖姣
reg [5:0]    CNT;                                  //counteralways@(posedge clk or negedge rst_n)
beginif(!rst_n)CNT <= 0;else if(CNT >= (period - 1'd1) )CNT <= 0;elseCNT <= CNT + 1'd1;
endalways@(posedge clk or negedge rst_n)
beginif(!rst_n)pwm <= 0;else                                          //rst_n = 1beginif(CNT <= (h_time - 1))pwm <= 1;elsepwm <= 0;end
endendmodule 

period用来设置方波信号频率,频率=50MHz / period,例如5MHz频率的方波信号,此时period应为10; h_time用来设置高电平时间。占空比=h_time/period*100%。
通过CNT来计数,当CNT<h_time-1时,PWM输出高,当CNT>h_time-1时,PWM输出低。
第六步 UCF管脚约束
ISE 的 UCF 文件主要是完成管脚的约束,时钟的约束, 以及组的约束。这里我们需要对pwm_output.v 程序中的输入输出端口分配到 FPGA 的真实管脚上, 这需要准备一个 FPGA 的引脚绑定
文件.ucf 并添加到工程中:新建一个空白文件 File->New, 选择 Text File。

在这个 Text 文件中添加以下的引脚定义,完成后另存为 pwm_output.ucf 文件。
把 pwm_output.ucf 文件添加到工程中,点击 Project→Add source, 添加后如下图所示:

最后进行编译即可.虽然使用ISE自带的Xilinx PlanAhead 14.7也可以进行引脚配置,但因为我刚开始学,配置过程总是出问题,所以就仿照历程里的UCF文件来照猫画虎了,不知道后期功能比较复杂的程序还能不能通过这种方式来进行引脚约束。大家可以根据自己的实际情况来选择。

- [4 ]Modelsim仿真
曾与多个会FPGA的同学沟通过,韩彬的书里面也强烈建议过,Modelsim仿真是很重要的一个过程,任何一个程序都要先通过仿真来进行验证。ISE与Modelsim的联合仿真虽然很方便,但是为了能使用Modelsim独立仿真,方便以后使用其他开发软件也可以得心应手,所以我还是从建立Modelsim仿真工程开始。
仿真工程的建立,我是利用Modelsim自己根据.V文件来生成testbench代码的功能来进行的。过程如下:
第一步:建立空白testbench代码窗口 File→New→Source→Verilog,

点击代码窗口的空白区,然后选择Source→Show Language Templates,然后就会弹出下图方格内的内容。

第二步:建立工程,将pwm_output.v文件导入。File→New→Project。

填写工程信息

添加已存在的Verilog程序文件。把pwm_output.v文件添加进来。


添加成功后进行编译

第四步:自动生成testbench程序框架,双击Create Testbench,选择对应的pwm_output.v文件


由于我之前建立过相关工程,所以这部直接跳过,不用在意。正常情况下不会出现这一步。

生成的代码框架如图,需要自己进行修改添加。

对模板进行修改补充后的testbench代码如下

/*------------------------------------------------------------------\\\|///\\ - - //( @ @ )
+-------------------------oOOo-(_)-oOOo----------------------------+
CONFIDENTIAL IN CONFIDENCE
This confidential and proprietary software may be only used as authorized
by a licensing agreement from Zhang (****).
In the event of publication,the following notice is applicable:
Copyright(C)2019-2020 Zhang Corporation
The entire notice above must be reproduced on all authorized copies.
Author                    :          Zhang
Technology blogs          :
Email Address             :          18713597390@163
Filename                  :          Counter_Design.v
Data                      :          2019-8-5
Description               :          generate one channel pwm testbench
Modification              :
Data           By           Version           Change Description
=====================================================================
19/8/5        Zhang           1.0                  Original
---------------------------------------------------------------------
|                               Oooo
+-------------------------oooO--(  )--------------------------------+(  )   ) /\ (   (_/\_)-------------------------------------------------------------------*/
`timescale 1ns / 1ps
module pwm_output_tb  ; parameter period  = 7'b0110010 ; 
parameter h_time  = 7'b0011001 ;wire   pwm   ; 
reg    clk   ; 
reg    rst_n   ; initial
beginclk = 0;#10rst_n = 0;#10rst_n = 1;
endpwm_test    #(period, h_time)DUT  ( .pwm (pwm ) ,.clk (clk ) ,.rst_n (rst_n ) ); always #10 clk =~ clk;endmodule

这里要注意,在modelsim自动生成的激励文件里,pwm_test #(period, h_time)这里要注意period和h_time的前后顺序,要保证和.v源程序里面的定义顺序一致。
第五步:对激励文件代码继续编译

第六步进行仿真

中间以后几步没有截图,就是添加wave,输入仿真时间等步骤。
波形输出正确,最后的的程序也修改了方波频率,下载到了开发板内,LED灯可以正常闪烁。也算是入门了。

更多推荐

FPGA学习笔记(1)——单通道PWM输出与Modelsim仿真

本文发布于:2024-02-25 18:40:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699922.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记   单通道   FPGA   PWM   Modelsim

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!