EDN首页   博客首页

4

关于投票
FPGA实现正弦波发生器

       本实现采用是altera的cyclone实现的,使用了quartus的一些高级功能,如:宏模块的引用、signal  Tap、以及modelsim的联合仿真。

       正弦波的硬件实现比较简单:首先设计一个ROM用来存放正弦函数的幅度数据;用一个计数器来指定ROM地址(相位)的增加,输出相应的幅度值。这样在连续的时间内显示的就是一个完整的正弦波形。原理图如下

点击看大图

生成模块如下:新建工程和原理图文件,点击symbol TOOL图标,点击选项就可以引用宏模型了。其中rom在storage中,counter 在数学库中。rom选择8BIT宽,64words,counter选择6bit宽,单向计数。

在建ROM模块前,先建一个初始数据文件(重点),这里直接在quartus中建memory initialnization file,输入正弦波的幅度值,也可以用excel/matlab/c++中的函数方便的生成数据。初始值如下所示:

最后仿真,因quartus不支持模拟显示,所以我们有两种方法一种是signal tap,它是需要硬件平台的一种在线分析仪;另一种就是modelsim,在采用modelsim仿真时必须加入必要的altera库函数,由于篇幅关系,这里对两种仿真不再多说,下图是modelsim的后级仿真(加入延时),可见加入延时后有一定的毛刺,但并不影响结果,如果不加入延时,产生的为平滑的正弦波。验证了设计的正确性.

点击看大图

 

 

 

 

 

 

 

 

 

系统分类: CPLD/FPGA
用户分类: 小芳的生活
标签: 小芳&小蒲的blog
来源: 原创
发表评论 阅读全文(1138) | 回复(3)

2

关于投票
出租车计价器(FPGA课程设计)

     最近,学习了EDA这门课后,做了出租车计价器这个课程设计,虽然很简单,但也算练了一下手,把整个流程熟悉了一遍~~

       设计要求:1、行程大于基本里程(如预置5公里)时,每多行1公里 在起步价(此处设为7元)上增加一个单价;2、当出租车到达某地需要等待(如红灯、中途停车等候等)按下“等候键”,便从计程转入计时(注意:计程和计时本来要用到传感器,检测轮胎的转数,这里因无法产生汽车的传感信号,故用CLK的不同分频代替)

     输入和输出信号:CLK、reset、start、wait、数码管显示输出价格;

程序设计:设计一个50000分频的分频器,把50MHZ分成1KHZ的时钟,提供给动态显示模块及另一分频器2.分频器2的功能是输出两种不同的分频脉冲,一种代表计程,一种代表计时。

 选择器:当输入WAIT信号为0时,(键按下)代表等待,此时每5个脉冲产生一个计数脉冲;当输入WAIT信号为1时,(键按下)代表等待,此时每10个脉冲产生一个计数脉冲

计价器:从选择器出来的计数脉冲作为计价器的时钟输入。
另有RES和START两个输入,当按下START键时,计价器预置起步价,并开始计数,当超过预置公里数时,每一公里,加上一个单价(这里是一元)

 显示模块:这里采用4个七段数码管显示
从计价器出来的数值经过十进制到BCD码的转换,送入显示模块。
显示模块采用动态扫描的方式,利用人眼的视觉停留就可以实现同时显示,资料表明只要扫描频率超过24HZ就能实现,这里我们采用分频器1出来的1KHZ。

BCD码送进后,分别编写段选和位选的程序。
段选程序根据数码管的共阴和共阳而定。

 最后编辑顶层模块把各个模块综合起来,实现设计

 本设计采用Verilog编程,在火龙刀板上实现设计。

如需要程序,请留言说明~~
 

n


 

n
n
系统分类: CPLD/FPGA
用户分类: 小芳的生活
标签: 小蒲&小芳blog
来源: 原创
发表评论 阅读全文(743) | 回复(7)
总共 , 当前 /