已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章 可编程逻辑设计实验实验一 流水灯【实验目的】通过本实验让学生进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及Verilog HDL语言的编程方法;学习简单的时序电路的设计和硬件测试。【实验内容】本实验的内容是控制实验箱上的发光二极管LED1LED8,使之实现流水灯显示。【实验原理】在LED1LED8引脚上周期性地输出流水数据,即输出的数据依次为11111111、11111110、11111100、11111000、11110000、11100000、11000000、10000000、00000000,如此循环显示,输出数据“0”,表示点亮相应的LED小灯。为了方便观察,流水的速率控制在2Hz左右。在核心板上有一个48MHz的标准时钟源,该时钟源与芯片EP2C5的23脚相连。为了产生2Hz的时钟源,在此调用了分频模块int_div。LED与FPGA的连接原理图如图4.1-1所示。图4.1-1 LED与FPGA的连接原理图【实验步骤】(1) 启动Quartus II,建立一个空白工程,然后命名为led_waterflow.qpf。(2) 新建ledwater.vhd源程序文件,源代码如下。然后进行综合编译。若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。生产符号文件ledwater.bsf (File Create/_Update Create Symbol Files for Current File)。(3) 将实验模块库里的int_div.v和int_div.bsf拷贝到工程目录下。(4) 新建图形文件,命名为led_waterflow.bsf并保存。在空白处双击鼠标,打开symbol对话框,在symbol对话框的左上角的libraies中,分别将project下的ledwater和int_div模块放在图形文件led_waterflow.bdf中,加入输入input、输出output引脚,双击各引脚符号,进行引脚命名。完整的顶层模块原理图如下图4.1-2所示。双击int_div中的参数框,并修改参数,如下图4.1-3所示。将F_DIV的值改为24000000,F_DIV_WIDTH的值改为25,单击“确定”按钮保存修改的参数。图4.1-2 流水灯顶层模块图4.1-3 参数修改对话框如果在led_waterflow.bdf上不能看到参数设置框,在空白出右击鼠标,选择Show Parameter Assignments命令来显示参数设置框。(5) 将实验模块选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的Cyclone II系列的EP2C5Q208C8,或者Cyclone I系列的EP1C12Q240C8。引脚锁定方法如表4.1-1所列。(6) 将led_waterflow.bdf设置成顶层实体Project Set as Top-level Entity。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。(7) 把JP20的led0led7的跳帽插上,使发光二极管有效。下载程序到芯片上,观察流水灯的变化。更改分频模块的分频系数,并重新编译下载,观察流水灯的变化。表4.1-1 引脚锁定方法信号引脚EP1C12信号引脚EP1C12Led050Led547Led153Led648Led254Led749Led355clock28Led4176【流水灯程序参考程序】module ledwater(led,clk);/模块名ledwateroutput7:0led;/定义LED输出口inputclk;/定义时钟输入口reg8:0led_r;/定义输出寄存器assign led = led_r7:0; /寄存器输出always (posedge clk)/过程beginled_r = led_r 1;/是,则输出左移一位if(led_r = 9d0)/循环完毕吗?led_r = 9b111111111;/是,则重新赋初值endendmodule43实验二 读取按键信号【实验目的】通过本实验让学生进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及Verilog HDL语言的编程方法;并熟悉Verilog HDL文件为顶层模块的设计;学习和体会分支条件语句case的使用方法及FPGA I/O口的输出控制。【实验内容】实验箱上有8个发光二极管LED1LED8和8个按键KEY1KEY8。本实验的内容是用这8个按键分别控制8个发光二极管,一旦有键按下,则点亮相应的发光二极管。【实验原理】FPGA的所有I/O控制块允许每个I/O引脚单独配置为输入口,不过这种配置是系统自动完成的。当该I/O口被设置为输入口使用时(如定义key1为输入引脚:input),该I/O控制块将直接使三态缓冲的控制端接地,使得该I/O引脚对外呈高阻态,这样该I/O引脚即可用作专用输入引脚。正确分配并锁定引脚后,一旦在KEY1KEY8中有键输入,即可在检测到键盘输入的情况下,继续判断其键盘并作出相应的处理。键盘电路如图4.2-1所示。图4.2-1 键盘电路【实验步骤】(1) 启动Quartus II,建立一个空白工程,然后命名为key_led.qpf。(2) 新建key_led.v源程序文件,源代码如下。然后进行综合编译。若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。(3) 选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的Cyclone I系列的EP1C12Q240C8。引脚锁定方法如表4.2-1所列。表4.2-1 引脚锁定方法电路图上标号FPGA管脚I/O方向说明KEY8156I独立按键, 核心板上KEY1-4与主板上KEY1-4共用KEY7158IKEY6141IKEY5143IKEY4124IKEY3123IKEY2122IKEY1121I(4) 对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。(5) JP6是一个3针的插座,如果把短接帽接到下面,使下面两个插针短接,则按键有效;如果把短接帽接到上面,使上面两个插针短接,则矩阵键盘有效。本实验令按键有效,把短接帽接到下面。把JP20的led0led7的跳帽插上,使发光二极管有效。下载程序到芯片上,按下KEY1KEY8的任何一键,观察发光二极管LED1LED8的亮灭状态。【参考程序】module keyled(key,led);/模块名keyledinput7:0 key;/定义键盘输入口output7:0led;/定义发光管输出口reg7:0led_r;/定义寄存器reg7:0buffer_r;assign led = led_r;/输出键值always(key)/过程1beginbuffer_r = key;/读取键值case(buffer_r)8b11111110:led_r = 8b11111110;/是键KEY1,则给寄存器赋值0xfe8b11111101:led_r = 8b11111100;/是键KEY2,则给寄存器赋值0xfc8b11111011:led_r = 8b11111000;/是键KEY3,则给寄存器赋值0xf88b11110111:led_r = 8b11110000;/是键KEY4,则给寄存器赋值0xf08b11101111:led_r = 8b11100000;/是键KEY5,则给寄存器赋值0xe08b11011111:led_r = 8b11000000;/是键KEY6,则给寄存器赋值0xc08b10111111:led_r = 8b10000000;/是键KEY7,则给寄存器赋值0x808b01111111:led_r = 8b00000000;/是键KEY8,则给寄存器赋值0x00default:led_r = 8b11111111;/否则给寄存器赋值0xffendcaseendendmodule实验三 静态数码管显示【实验目的】通过本实验让学生学习7段数码管显示译码器的设计,进一步了解、熟悉和掌握FPGA开发软件Quartus II的使用方法及Verilog HDL语言的编程方法,学习LPM兆功能模块的调用。【实验内容】实验箱上有2个4位动态共阳极数码管LED12和LED13,如图4.3-1所示,其中8个位码DIG0DIG7和8位段码SEG0SEG7分别与FPGA相应的引脚相连。这样只要DIG0DIG7上一直输出低电平“0”,则8个数码管将显示相同的数码,这样8位动态数码管就变成了静态数码管。本实验的内容是建立7段译码显示模块,用于控制LED数码管的静态显示。要求在试验箱上循环显示09和AF 16个字符。图4.3-1七段数码管显示电路【实验原理】数码管LED显示是工程项目中使用较广的一种输出显示器件。常见的数码管有共阴和共阳两种。共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将8个发光二极管的阳极连接在一起作为公共端。公共端常称为位码,而将其它8位称为段码,分别为:a、b、c、d、e、f、g、h,其中h为小数点。对于共阳极数码管,只要公共端为高电平“1”,某个段输出为低电平“0”,则相应的段就亮。本实验通过分频模块得到1Hz的频率信号,加载于4位计数器的时钟输入端,计数循环输出09和AF 16个字符,通过7段译码模块后在数码管上显示出来。【实验步骤】(1) 启动Quartus II,建立一个空白工程,然后命名为sled.qpf。(2) 新建decl7s.v源程序文件,源代码如下。然后进行综合编译。若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。生产符号文件decl7s.bsf (File Create/_Update Create Symbol Files for Current File)。(3) 将实验模块库里的int_div.v和int_div.bsf拷贝到工程目录下。(4) 添加4位兆计数器功能模块。步骤如下: 在Quartus II主界面中选择ToolsMega Wizard Plug-In Manager,打开如图4.3-2所示的兆功能模块向导。选择Create a new custom megafunction variation新建一个新的兆功能模块。图4.3-2 添加兆功能模块向导对话框Page1 单击Next进入向导第2页,按照如下图4.3-3所示填写。选择LPM_COUNTER,设置号输出文件的类型和路径,使用Cyclone族的器件。 单击Next进入向导第3页,按照如下图4.3-4所示填写。选择4位计数器。 剩余步骤不需更改设置,在这里可以一步一步单击Next,或者直接单击Finish结束。注意在结束时一定要选择生成“*.bsf”符号文件。图4.3-3 添加兆功能模块向导对话框Page2图4.3-4 添加兆功能模块向导对话框Page3(5) 新建图形设计文件,命名为sled.bdf并保存。文件的设计如下图4.3-5所示。图4.3-5 静态LED显示顶层模块图(6) 选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的Cyclone I系列的EP1C12Q240C8。引脚锁定方法如下表4.3-1所列。表4.3-1 引脚锁定方法电路图上标号FPGA管脚I/O方向说明SEG0169O七段数码管 段码SEG1170OSEG2167OSEG3168OSEG4165OSEG5166OSEG6163OSEG7164ODIG0160O七段数码管 位码DIG1159ODIG2162ODIG3161ODIG4215ODIG5216ODIG6213ODIG7214O(7) 将sled.bdf设置成顶层实体(ProjectSet as Top-level Entity)。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。(8) 下载程序到芯片上,观察数码管的显示状态。【程序参考】module decl7s(d,seg);/模块名decl7sinput3:0 d;/输入4位二进制码output7:0seg;/七段译码输出reg7:0 seg_r;/定义数码管输出寄存器assign seg = seg_r;/输出数码管译码结果always (d)begincase(d)/七段译码4h0:seg_r = 8hc0;/显示04h1:seg_r = 8hf9;/显示14h2:seg_r = 8ha4;/显示24h3:seg_r = 8hb0;/显示34h4:seg_r = 8h99;/显示44h5:seg_r = 8h92;/显示54h6:seg_r = 8h82;/显示64h7:seg_r = 8hf8;/显示74h8:seg_r = 8h80;/显示84h9:seg_r = 8h90;/显示94ha:seg_r = 8h88;/显示a4hb:seg_r = 8h83;/显示b4hc:seg_r = 8hc6;/显示c4hd:seg_r = 8ha1;/显示d4he:seg_r = 8h86;/显示e4hf:seg_r = 8h8e;/显示fendcaseendendmodule实验四 动态数码管显示【实验目的】学习动态扫描显示的原理及电路的设计。【实验内容】本实验内容是建立数码管动态扫描显示模块。在试验箱上完成LED数码管的动态显示18这8个数。稳定显示后,放慢扫描速度演示动态显示的原理过程。【实验原理】数码管LED显示是工程项目中使用较广的一种输出显示器件。常见的数码管共阴和共阳两种。共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将8个发光二极管的阳极连接在一起作为公共端。公共端常称为位码,而将其它8位称为段码,分别为:a、b、c、d、e、f、g、h,其中h为小数点,只要公共端为高电平“1”,某个段输出为低电平“0”,则相应的段就亮。把每个数码管的8个段都分别连接到SEG0SEG7,8个数码管分别由8个选通信号DIG0DIG7来选择。被选通的数码管显示,其余关闭。例如在某一时刻,DIG2为“0”,其余数码管选通信号为“1”,这是仅DIG2对应的LED数码管显示来自段码信号端的数据,而其他数码管成关闭状态。根据这种电路状态,如果希望8个数码管全都显示想要的数据,就必须使得8个选通信号DIG0DIG7分别单独选通,同时在段输入端加上对应的数据。虽然每次只有一个LED显示,但只要扫描的速率够快,由于人眼视觉的余晖效益,我们仍会感觉所有数码管都在同时显示。试验箱的七段数码管显示电路图如图4.3-1所示。【实验步骤】(1) 启动Quartus II,建立一个空白工程,然后命名为dled.qpf。(2) 新建scan_led.vhd源程序文件,源代码如下。然后进行综合编译。若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。生产符号文件scan_led.bsf (File Create/_Update Create Symbol Files for Current File)。(3) 将实验模块库里的int_div.vhd和int_div.bsf拷贝到工程目录下。(4) 添加4位兆计数器功能模块。步骤如下: 在Quartus II主界面中选择ToolsMega Wizard Plug-In Manager,打开如图4.4-1所示的兆功能模块向导。选择Create a new custom megafunction variation新建一个新的兆功能模块。图4.4-1 添加兆功能模块向导对话框Page1 单击Next进入向导第2页,按照如下图4.4-2所示填写。选择LPM_CONSTANT,设置好输出文件的类型和路径,使用Cyclone族的器件。 图4.4-2 添加兆功能模块向导对话框Page2 单击Next进入向导第3页,按照如下图4.4-3所示填写。数据宽度32位,数值为12345678H。图4.4-3 添加兆功能模块向导对话框Page3 剩余步骤不需更改设置,在这里可以一步一步单击Next,或者直接单击Finish结束。如下图所示4.4-4。注意在结束时一定要选择生成“*.bsf”符号文件。图4.4-4 添加兆功能模块向导对话框结束页(5) 新建图形设计文件,命名为dled.bdf并保存。文件的设计如下图4.4-5所示。图4.4-5 动态LED顶层显示模块(6) 选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的Cyclone II系列的EP2C5Q208C8,或者Cyclone I系列的EP1C12Q240C8。引脚锁定方法如表4.3-1所列。(7) 将dled.bdf设置成顶层实体(ProjectSet as Top-level Entity)。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。(8) 下载程序到芯片上,观察数码管的显示状态。(9) 稳定显示后,放慢扫描速度演示动态显示的原理过程。【提高内容】 设计采用键盘和锁存器替代“动态LED顶层显示模块”中的CONSTANT模块,实现键盘输入显示内容。上电后显示00000000,按下“1”键显示内容变为00000001,再按下“2”键显示00000012,以此类推。比较无按键消抖和加入按键消抖时的区别。【参考程序】(1)动态扫描程序(scan_led.v)module scan_led(clk_1k,d,dig,seg);/模块名scan_ledinput clk_1k;/输入时钟input31:0 d;/输入要显示的数据output7:0dig;/数码管选择输出引脚output7:0 seg;/数码管段输出引脚reg7:0 seg_r;/定义数码管输出寄存器reg7:0 dig_r;/定义数码管选择输出寄存器reg3:0 disp_dat;/定义显示数据寄存器reg2:0count;/定义计数寄存器assign dig = dig_r;/输出数码管选择assign seg = seg_r;/输出数码管译码结果always (posedge clk_1k) /定义上升沿触发进程begincount = count + 1b1;endalways (posedge clk_1k) begincase(count)/选择扫描显示数据3d0:disp_dat = d31:28;/第一个数码管3d1:disp_dat = d27:24;/第二个数码管3d2:disp_dat = d23:20;/第三个数码管3d3:disp_dat = d19:16;/第四个数码管3d4:disp_dat = d15:12;/第五个数码管3d5:disp_dat = d11:8;/第六个数码管3d6:disp_dat = d7:4;/第七个数码管3d7:disp_dat = d3:0;/第八个数码管endcasecase(count)/选择数码管显示位3d0:dig_r = 8b01111111;/选择第一个数码管显示3d1:dig_r = 8b10111111;/选择第二个数码管显示3d2:dig_r = 8b11011111;/选择第三个数码管显示3d3:dig_r = 8b11101111;/选择第四个数码管显示3d4:dig_r = 8b11110111;/选择第五个数码管显示3d5:dig_r = 8b11111011;/选择第六个数码管显示3d6:dig_r = 8b11111101;/选择第七个数码管显示3d7:dig_r = 8b11111110;/选择第八个数码管显示endcaseendalways (disp_dat)begincase(disp_dat)/七段译码4h0:seg_r = 8hc0;/显示04h1:seg_r = 8hf9;/显示14h2:seg_r = 8ha4;/显示24h3:seg_r = 8hb0;/显示34h4:seg_r = 8h99;/显示44h5:seg_r = 8h92;/显示54h6:seg_r = 8h82;/显示64h7:seg_r = 8hf8;/显示74h8:seg_r = 8h80;/显示84h9:seg_r = 8h90;/显示94ha:seg_r = 8h88;/显示a4hb:seg_r = 8h83;/显示b4hc:seg_r = 8hc6;/显示c4hd:seg_r = 8ha1;/显示d4he:seg_r = 8h86;/显示e4hf:seg_r = 8h8e;/显示fendcaseendendmodule(2)按键消抖(debounce.v)module debounce(clk,key_in,key_out);/按键消抖模块input clk;/系统时钟输入inputKEY_WIDTH-1:0 key_in;/外部按键输入outputKEY_WIDTH-1:0key_out;/按键消抖输出regKEY_WIDTH-1:0dout1,dout2,dout3;/寄存器parameter KEY_WIDTH = 8;/参数assign key_out = (dout1 | dout2 | dout3);/按键消抖输出always (posedge clk)begindout1 = key_in;dout2 = dout1;dout3 = dout2;endendmodule实验五 数控分频器及逻辑分析仪使用【实验目的】学习数控分频器的设计、分析和测试方法。【实验内容】在SmartSOPC实验箱上的实现数控分频器的设计。在cik输入64 kHz或更高(要确保分频后落在音频范围)的频率信号(由int div模块分频得到);输出FOUT接蜂鸣器BUZZER,由KEYl/KEY2控制输入8位预置数,并在数码管1-2上显示(调用key_led模块)【实验原理】数控分频器的功能就是当输入端输入不同的数据时,产生不同的分频比,从而产生不同的频率值。本倒是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。【实验步骤】 (1)启动QuartusII建立一个空白工程,然后命名为dvf. qpf。新建Verilog HDL源程序文件pulse.v,输入程序代码并保存(完整的Verilog HDL程序参考程序清单3 1 0),进行综合编译。若在编译过程中发现错误,则找出井更正错误,直至编译成功为止。 (2)建立波形仿真文件(dvf. vwf)并进行功能仿真验证。如图4.5-1所示图4.5-1 数控分频器仿真波形图(3)将EDA_Componet目录下的Key_led.bsf、Key_led.v、和int_div.bsf、int_div.v拷贝到工程目录。 (4)新建图形设计文件(顶层模块)命名为dvf. bdf并保存。其模块原理图如图4.5-2所示。图4.5-2 1位全加器顶层模块 (5)选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera公司Cyclone系列的EPIC6Q240C8芯片,引脚锁定方法如表4.5-1所列。将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。表4.5-1 引脚锁定方法 (6)将dvf. bdf设置为顶层实体。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 (7)连接硬件、下载程序。 将跳线短接帽跳接到JP7和JP6的KEYI、KEY2和BEEP。将Altera ByteBlasterl下载电缆的两端分别接到PC机的打印机井口和QuickSOPC核芯扳上的JTAG下载口上,打开电源,执行下载命令,把程序下载到FPGA器件中。按下KEY1、KEY2键改变分频预置数观察蜂鸣器发出的声音有何变化。 (8)用逻辑分析仪观察分频器输出逻辑信号。逻辑分析仪的使用参看逻辑分析仪的帮助文件。 【参考程序】module pulse(clk,data,fout);/数控分频器input clk;/时钟输入input7:0data;/预置分频数output fout;/分频输出reg fout_r;/输出寄存器reg7:0 cnt8;/8位计数器reg full;/溢出标志位reg cnt2;assign fout = fout_r;/分频输出always (posedge clk)beginif(cnt8 = 8hff)begincnt8 = data;/当cnt8计数计满时,输入数据Data被同步预置给计数器Cnt8full = 1b1;/同时使溢出标志信号full输出为高电平 endelsebegincnt8 = cnt8 + 1b1;/否则继续作加1计数full ”按钮添加所有节点,最后按下“ok”按钮。图4.6-4 添加节点 波形编辑器默认的仿真结束时间为1us,根据仿真需要可以设置仿真文件的结束时间。选择Edit End Time命令可以更改。这里采用默认值不需更改。图4.6-5 添加完节点的波形图 编辑输入节点的波形。编辑时将使用到波形编辑工具栏中的各种工具。下图4.6-6显示了工具栏中各种工具的功能。图4.6-6 波形编辑器工具条 在Quartus II主界面下选择Processing Simulator Tool 命令,弹出如下图4.6-7对话框。按下图步骤进行选择和设置 观察仿真结果是否与设计相符合,如果不符合,须重新设计文件,再进行综合编译、仿真,直到仿真结果与设计相符为止。图4.6-7 仿真设置对话框图 1位全加器仿真波形图(4)选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的Cyclone I系列的EP1C12Q240C8。引脚锁定方法如下表4.6-1所列。表4.6-1 引脚锁定方法信号引脚信号引脚EP1C12EP1C12Led050Key0121Led153Key1122Led254Key2123sum48cout49(5)P6是一个3针的插座,如果把短接帽接到下面,使下面两个插针短接,则按键有效;如果把短接帽接到上面,使上面两个插针短接,则矩阵键盘有效。本实验令按键有效,把短接帽接到下面。把JP20的LED1LED8的跳帽插上,使发光二极管有效。下载程序,按下KEY1KEY3,观察发光二极管LED1LED3、LED7、LED8的状态。【参考程序】 (1)module fulladd1(a,b,cin,sum,cout);/1位全加器input a,b,cin;/输入端口output sum,cout;/输出端口wire s1,t1,t2,t3;and(t1,a,cin), (t2,b,cin), (t3,a,b);xor(s1,a,b),(sum,s1,cin);or(cout,t1,t2,t3);endmodule(2)module fulladd(a,b,cin,sum,cout);/1位加器input a,b,cin;/输入端口output sum,cout;/输出端口assign cout,sum = a + b +cin;endmodule实验七 异步收发(UART)模块【实验目的】 (1)学习使用FPGA设计一个通用异步收发器(UART); (2)学习使用LA1532逻辑分析仪的UART插件进行分析。【实验内容】本实验的内容是设计通用异步收发器(UART)。利用Quartus II完成设计、仿真等工作,然后通过SmartSOPC实验箱上的RS232接口和PC机联机进行硬件测试和分析,RS232的硬件原理如图1 26所示。最后通过KEY1KEY2输入要发送的数据,并显示于数码管12,按KEY3发送数据到PC机,通过串口调试软件显示由FPGA发送的数据;由PC机发送到FPGA的数据显示数码管7/8。数据的输入、显示等操作由本实验提供的一个测试模块(uart_test)完成(参见图4.7-5),用户可以自行分析该测试模块,这里主要介绍UART模块的设计。本实验以48 MHz晶振产生的频率为例,以波特率为9 600、8位数据、1位停止位的格式进行数据传输。【实验原理】 UART即Universal Asynchronous Receiver Transmkter意为通用异步收发器,是一种应用广泛的短距离串行传输接口。下面简单介绍数据传输的基本原理。 由于波特率为9600的一个信息位所需要的时间为1 s/9600=104l0-6s,也就是说要每隔104s发送一位数据,且发送的数据要符合串行数据的格式。串行通信的数据格式如图4. 7-1所示。首先发起始位低电平,接着DOD7发送8位数据,最后发送停止位的高电平。图4. 7- 1基本UART较格式串行数据发送的结构如图4. 7-2 所示,由基准时钟模块产生一个104s的时间,当要发送数据时,串行数据发送控制器把数据总线上的内容加上起始和停止位,然后进行移位发送。图4.7-2串行数据发送结构图当使用48 MHz的振蔼频率时,要求波特率为9600的计数周期数目为( 1/9 600)(1/48106)=5000也就是说波特率基准的位时钟可以对48 MHz的晶振进行5 000次分频得到。串口数据接收的原理如图4.7-3所示。由基准时钟产生一个16倍于波特率的额率,这样就把一个位的数据分成16份了。若检测到起始位的下降沿,就开始进行数据采样。采样的数据为一个位的第6、7、8三个状态,然后三个中取两个以上相同的值作为采样的结果,这样可以避免干扰。当起始位的采样结果不是0时就判定为接收为错,把串行数据接收控制器的位计数器复位。当接收完10位数据后就进行数据的输出,并把串行数据接收控制器的位计数器复位,等待下一数据的到来。UART接收的帧时序图如图4.7-4所示。 图4.7-3 串行接收原理图 图4.7-4基本UART帧时序图产生的基准时钟频率为9 60016 =153600 Hz.当使用48 MHz振荡频率时,要求153600 Hz的计数周期数目为(1/153600)/(1/48106)=312.5也就是说波特率基准的位时钟可以由对48 MHz的晶振进行312.5次分频得到。鉴于小数分频操作起来比较麻烦,所以这里进行取整,取312次分频,当然这样会存在一定的误差,但只要不超过最大允许误差(约5%)即可。【实验步骤】(1) 启动Quartus II 建立一个空白工程,然后命名为uart.qpf。(2) 新建VerilogHDL源程序文件rec.v和send.v,写出程序代码并保存,(Verilog HDL程序参考程序清单),进行综合编译。若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。(3)建立波形仿真文件并进行仿真验芷。(4)将光盘中EDA_Component目录下的uart_test. bsf、uart_test. v拷贝到工程目录。(5)新建图形设计文件进行硬件测试,命名为uart. bdf并保存。其模块原理图如图4.7-5所示。图4.7-5 UART测试顶层模块原理图(6)选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera公司Cyclone系列的EPIC6Q240C8芯片,引脚锁定方法如表4.7-1所列。将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。表4.7-1引脚锁定方法(7)将uart. bdf设置为顶层实体。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 (8)硬件连接、下载程序。 如果核心板是QuickSOPC1C12则须执行此步骤,否则跳过此步。用实验箱配置的连线将核心板上PACK区的引脚236、237、238和239分别与数码管显不区的COM3( DIG COM)的DIG4D1G7相对应连接。 将跳线短接帽跳接到SmartSOPC实验箱上JP6的KEY1KEY3使KEYl - KEY3分别与FPGA的引脚相连,用串口线将SmartSOPC实验箱上的UART czl和PC机的串口(COMl)连接起来。将Altera ByteBlasterll下载电缆的两端分别接到PC机的打印机井口和QuickSOPC核芯板上的JTAG下载口上,打开电源,执行下载命令,把程序下载到FPGA器件中。 (9)打开串口调试软件,设置使用串口COM1,波特率为9600 bps,8位数据位和l停止位,在发送窗口输出两个字符,设置为十六进制格式,按“发送”按钮,观察数码管7/8的状态。在SmartSOPC按KEY1KEY2,输入两位十六迸制数,按KEY3发送,然岳观察串口调试软件的接收窗口。 (10)用LA1532逻辑分析仪的UART插件进行硬件时序分析。 将逻辑分析仪上的PODA-GND线接插到核心板上的地端,PODA-O和PODA-1分别接SmartSOPC实验箱上UART COM的UART_RXD和UART_TXD接上USB线。 在zlglogic主界面中选择“设置”“总线信号”,弹出Setup对话框。在该对话框中进行总线设置,把默认的MyBus0删除,把Mybusl重新命名为RXD,选中Pod A下的“0”选择框,单击“插入一插人1条测量线,命名为TXD,并选中“1”选择框,如图4.7-6所示,可单击“确认”退出设置。图4.7-6 串口发送接收总线设置对话框 在ziglogic主界面中选择“工具”“插件管理器”命令,弹出如图4.7-7所示对话框。选中“UART总线分析”复选框,然后单击“设置”按扭,弹出如图4.7-8所示对话框图4.7-7逻辑分析仪插件管理器对话框在UART设置对话框选择和设置时,要注意标记部分。单击“确定”按钮完成设置。关于逻辑分析仪更详细的操作及说明请阅读软件自带的帮助文档。图4.7-8 UART设置对话框 在zlglogic主界面下选择“设置”“触发”命令,弹出如图4.7-9选择“插件相关”下的“UART总线分析”,然后选择“开始位触发”,这样只要对UART总线进行操作,系统就进行数据采样。图4.7-9 UART触发设置对话框 启动逻辑分析仪,单击工具栏中重复采样按钮浦峨进行数据采集,采样的波形图如图4.7-10 所示。图4.7-10 用LA1532采样的UA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体系建设任务协议书
- 业务培训支持协议书
- 二次加压泵站建设与优化方案
- 企业自愿出资协议书
- 买屋地定金合同范本
- 仪表设备维修协议书
- 代言人协议合同书写
- 仪表维护承包协议书
- 招聘助理想象力与创新思维的培养方案
- 电子元器件工程师的年度工作规划与实施
- 土地复垦合同补充协议
- 《狐假虎威》课本剧剧本:演绎经典寓言的新方式
- 征求意见稿-电力设备智慧监造技术导则
- 部编版小学道德与法治六年级上册配套表格式教案(全册)
- 华为客户接待流程
- 《税收优惠政策促进企业研发创新探究的国内外文献综述》7200字
- 融资报告范文模板
- 工伤事故分析报告范文
- 车位租赁协议
- 人教版(2024)八年级上册物理期中模拟试卷2(含答案)
- 人教版(2024新版)七年级上册数学期中模拟试卷(第1章 有理数~第3章 代数式)(含答案)
评论
0/150
提交评论