|
|
|
|
|
|
分频程序
摘要:众所周知,分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如altera 的PLL,Xilinx的DLL.来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。因此很多招聘单位在招聘时往往要求应聘者写一个分频器,以考核应聘人员的设计水平和理解程度。 1、占空比为50% 偶数分频 比较简单,例如要进行N分频,当计数器计数.
阅读全文
ADC_TLC549
摘要:ADC_TLC549是一个8位串行模数转换器,A/D转化时间不超过17us, I/O频率不能超过1.1MHZ.如图所示,为TLC549的时序图,从图中可以看出,当cs拉低时,ADC前一次的转换数据A的最高位A7立即出现在DATA_OUT上,之后数据在I/O clock的下降沿变化,在上升沿读取数据。读取完8位数据后,ADC开始转换这一次采集的信号,转化时间不超过17us,转换时,cs要给高电平。总之,操作时序时需注意tsu、tconv、I/0 clock几个参数,tsu为cs拉低到第一个I/O clock时钟上升沿所需的时间至少需要1.4us; tconv为ADC转换数据所需的时间,不超过1.
阅读全文
步进电机
摘要:步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。多相步进电动机有多相方波脉冲驱动,用途很广。使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各相绕组。每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化,转子会转过一定的角度(称为步距角)。正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机.
阅读全文
直流电机PWM控制
摘要:对于电机这一块,我们专业也开了很多理论课,所以,对于直流电机的控制还是蛮熟悉的,只是都停留在理论知识上,今天终于实践了一把。大家如果对直流电机的特性和PWM技术不熟悉,可以查看相关的资料就可以了。下面是控制电路 当motor_a是高电平时,Q3,Q1,Q5导通,A端位高电平,B端为低电平,直流电机正转;由于Q5的集电极通过一个二极管连接到H桥的另外一个控制端motor_b,将motor_b的电压钳在1.0V以下,所以,不管motor_b输出高电平还是地电平,Q6、Q4、Q2都会截止,不会造成H桥短路; 当motor_a是低电平时,Q3,Q1,Q5截止,motor_b输出的电平可以控制电机的反.
阅读全文
PWM技术控制LED灯逐渐亮灭
摘要:我是自动化专业的,所以对PWM技术并不陌生,但都停留在理论知识上面,没有实际写过程序来实现PWM技术,直到这几天因为要用PWM技术来控制直流电机,所以才潜心研究PWM技术,今天小试牛刀,来用PWM技术控制LED灯逐渐亮灭。//程序实现的功能:利用PWM技术来控制LED的逐渐亮灭;module led_pwm ( clk, rst_n, key, led_out ); input clk; //系统时钟:50MHZinput rst_n; //复位信号:低电平有效;input key; //按...
阅读全文
FIFO
摘要:FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 FIFO多用于:1、不同时钟之间的数据传输;2、不同跨度的接口;//程序实现的功能:串口从FIFO中读出数据,然后发送给上位机(串口调试助手) module fifo_uart ( clk, rst_n, rs232_tx )...
阅读全文
SRAM
摘要:SRAM(静态随机存储器)它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。一种很简单的操作是:将片选信号CE_n和输出使能信号OE_n直接拉低,在读/写SRAM的时候只要对写使能信号WE_n操作就可以了. 读操作:只需将要读出数据的地址放在地址总线上,拉高WE_n写使能信号,延时一段时间(具体延时多长时间可以看datasheet),就可以读出相应的数据了。写操作:送地址和数据,同时拉低WE_n写使能信号,延时一段时间,然后拉高WE_n,这样就可将要写入的数据写到SRAM的相应地址中。//程序实现的功能:往SRAM中写一个字节的数据,然后读出这个数据送给四位LED灯; .
阅读全文
IIC总线
摘要:好久没有更新博客了,这期间一个月都在家里休息,也没怎么看书,8月24号才回学校,这几天忙着在研究IIC总线,用FPGA来模拟IIC接口的确比单片机要复杂的多,开始,自己写的程序怎么也在板子上运行不了,我就参考来了特权同学的程序,果然还是没有很深刻理解IIC接口的时序,导致程序不能运行!现在,觉得学一种硬件,必须将它的数据手册看透彻,时序要弄的很清楚,特别是对于FPGA来说!//程序实现的功能:向IIC中写一个字节的数据,然后读出来,显示在8个LED灯上;module iic_driver ( clk, rst_n, key1, ...
阅读全文
FPGA/CPLD设计学习笔记(转载)
摘要:FPGA\CPLD设计学习笔记1、硬件设计基本原则(1)、速度与面积平衡和互换原则:一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。从而实现了用面积复制换取速度的提高。(2)、硬件原则:理解HDL本质(3)、系统原则:整体把握(4)、同步设计原则:设计时序稳定的基本原则2、Verilog作为一种HDL语言,对
阅读全文
PS2键盘
摘要:PS2键盘是一种很普通的键盘,有6个接口,其实我们只需关心两个引脚,数据信号DATA,和时钟CLK信号,和串口通信差不多,DATA有12位,其中8位是有效数据位,每当CLK的下降沿到来时,开始采集数据! 键盘编码返回值,如有键盘被按下,就会发送通码,当按键被释放,就会发送断码,每个按键都分配了唯一的通码和断码,这样主机通过查唯一的扫描码就可以知道是哪个按键。按键的通码和断码组成了一套扫描码集,现在用的比较多的是第二套扫描码,多数第二套断码有2字节长,第一个字节是8'hf0;第二个字节是这个按键的通码。例如按下T键,然后再释放T键,此时发送到计算机的数据应该是:8'h2c(通码)
阅读全文
VGA接口(四)字符
摘要:今天再接再励,字符在电脑上也显示出来了,这个字符和昨天的图片有点不一样,昨天显示的是一幅图片,可以行取模,然后将行地址赋给rom_addr,若要显示多幅图片,这个方法,还有待改进!今天要在电脑液晶屏上显示多个字符,可以列取模,然后,将列地址赋给rom_addr,然后,根据rom_data逐行判断点阵是否该点亮。还是,那句话其实大家只要把VGA的时序,、怎样取字模存入FPGA的ROM中,以及采取怎样的扫描方式在电脑上显示,这几个问题弄明白了,我想VGA接口也不是那么难!//程序实现的功能:在电脑液晶屏上显示“大家来一起学习 FPGA”几个字符;64*640点阵module vga_zifu ..
阅读全文
VGA接口(三)图片
摘要:折腾了几天,一直在研究如何在电脑上显示图片,总算在今天下午弄出来了,其实主要的问题是因为第一次学习怎样将图片的字库,存在FPGA的ROM中,以及怎样将它取出来显示在电脑,其他的和上两个实验的内容差不多,只要把上面几个问题想清楚了,这图片显示的不是很难的事!//程序实现的功能:在电脑屏幕上显示一张64*64点阵的皮卡丘图片;module vga_tp ( clk, rst_n, hsync, vsync, vga_r, vga_g, vga_b ); ...
阅读全文
VGA接口(二)
摘要:今天本来打算写一个256色彩程序在电脑液晶显示屏上显示的,可结果我发现我的FPGA开发板上VGA接口的RGB只有三位,没办法,只能显示八种色彩,那就将就一下,显示八种颜色吧!其实,和VGA接口(一)中的程序差不多哦,只是,多了几个坐标区间而已,大家学习VGA接口,只要把它的坐标区间弄清楚,我想驱动简单的VGA接口程序,应该没什么问题的,因为,我也是一名FPGA初学者,对VGA了解的不是很深,所以,在这里献丑了!接下来看代码吧。//程序功能:在屏幕上显示八条不同颜色的矩形条;module vga ( clk, rst_n, hsync, vsyn...
阅读全文
VGA接口(一)
摘要:VGA接口共有15针,分成3排,每排5个孔,是显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。 此前没有接触过VGA,因为单片机频率太低,不足以驱动VGA,而FPGA足以驱动VGA,今天小试牛刀,编写了一个矩形框,在液晶显示屏上显示!//程序功能:背景红色, 小矩形为绿色, 矩形框为蓝色;module vga ( clk, rst_n, hsync, vsync, vga_r, vga_g, vga_b );input clk;...
阅读全文
UART(串口通信)
摘要:串口通信:是一种通用串行数据传输总线,可以实现全双工传输。是一种很常见的通信协议,此次写的程序在基于rs-232通信协议,以前在单片机里也用C51语言写过它的驱动程序,不过现在是用Verilog语言来写它的驱动程序,一种全新的思维模式来驱动它,和单片机大不一样。//程序功能:在上位机(串口调试助手)上发送数据给下位机(PFGA),//下位机接收到数据后,控制LED灯亮灭,并且以原数据返回给上位机;module uart_top ( clk, rst_n, rs232_rx, rs232_tx, l...
阅读全文
VHDL+Verilog良好的代码编写风格(转载)
摘要:良好代码编写风格可以满足信、达、雅的要求。在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。良好代码编写风格的通则概括如下:(1) 对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写;(2) 使用有意义的信号名、端口名、函数名和参数名;(3) 信号名长度不要太长;(4) 对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk 作为时钟信号的前缀;(5) 对来自同一驱动源的信号在不
阅读全文
LCD1602液晶
摘要:这两天都在学习怎样用verilog语言写LCD1602液晶的程序,其实,我对1602液晶还是蛮熟悉的,毕竟,在学单片机的时候,也用C51写过它的驱动程序,还是蛮简单的,但是由于FPGA是并行的,所以,写的驱动程序和单片机的不太一样,今天有幸在网上看到了Crazy Bingo用状态机写的1602液晶的驱动程序,突然觉得verilog语言中的状态机这么强大,竟然能像这样用状态机来写LCD1602液晶的驱动程序;自己写的代码太烂,没敢贴出来,所以,参考了他写的代码,然后修改了一下!//程序实现的功能:在LCD1602液晶上显示字符;module lcd_1602 ( ...
阅读全文
3路抢答器(键盘+数码管+LED灯+蜂鸣器)
摘要:差不多三天的时间都在弄这个抢答器,总算今天把它弄好了,这FPGA中还是得学会建模,学划分模块,对于这一块感觉自己还差那么点,不能很好地考虑好大局,然后细化到每一个模块,因为一个好的顶层模块,可以让子模块的程序更加简洁,否则子模块看起来很复杂,程序写起来也很费劲。好吧,下面来看程序。//程序实现的功能:三路抢答器,当刚上电时,数码管开始倒计时40s;蜂鸣器响一下,四个LED灯闪烁一段时间;//期间如果有键盘按下,蜂鸣器响一下,四个LED灯闪烁一段时间,而数码管显示相应的按键值;//如果40S计时到后,没按键按下,蜂鸣器响一下,四个LED灯闪烁一段时间,数码管又从新开始计时;module qia.
阅读全文
数字秒表(键盘+数码管)
摘要:差不多最近三天都在忙着调试秒表这个程序,其实昨天就能实现秒表的功能的,就是键盘这里出现的问题,当按键下去时,秒表没有停止计数,我很仔细检查了键盘消抖模块,觉得应该没什么问题,这个模块在前面的johnson计数器中用过,消抖情况良好,没有一点抖动!那到底是什么问题呢? 接下来差不多一天时间里,都在思考这个问题,我还是觉的是计数模块出了问题,为什么键盘按下去没有停止计数呢?起初,我还在想,我让分频时钟停下来,不就可以了吗?往往想法是好的,但是实践起来,却事与愿违,现在体会到了实践的重要性,这样还是不能解决,那应该用什么方法解决了?我上网查了很多资料,还是没什么实质的办法。今天突然想到是不是按键下.
阅读全文
模块化编程----键盘控制数码管进行加减数
摘要:模块化设计是FPGA设计中一个很重要的技巧,它能够使一个大型设计的分工协作、仿真测试更加容易,是代码维护升级更加便利! 今天弄了大半天总算学会了怎样在quartus中来进行模块化编程。接下来写的这个程序的功能是:两个按键控制数码管加减数。// 程序实现的功能://当key1被按下时,数码管上的数加1(到9后不加了);//当key2被按下时,数码管上的数减1(到0后不减了);module key_smg_top ( sysclk, rst_b, key1, key2, smg_se...
阅读全文
|
|