基于CPLD的汽车尾灯控制器设计报告Word下载.docx
- 文档编号:22398547
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:21
- 大小:31.08KB
基于CPLD的汽车尾灯控制器设计报告Word下载.docx
《基于CPLD的汽车尾灯控制器设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《基于CPLD的汽车尾灯控制器设计报告Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
工程设计
(1)在VerilogHDL文件中编写源程序
a.在ProjectNavigator窗口的File标签中的led.v文件单击鼠标右键,在弹出的对话框中单击SetasTop-levelEntiy选项。
将led.v设置为顶层实体。
b.选择Processing→Start→StartAnalysis&
Synthesis进行综合编译,也可使用工具栏的综合编译按钮启动编译。
c.若在编译过程中发现错误,则找出并改正错误,直到编译成功。
(2)从设计文件创建模块
a.在ProjectNavigator窗口的File标签中的.bdf文件单击鼠标右键,在弹出的对话框中单击SetasTop-levelEntiy选项。
将.bdf设置为顶层实体。
b.在File→Create/Updata项选择CreateSymbolFileforCurrentfile,单击确定。
生成led.bsf文件。
(3)添加led.bsf模块到Quartus
顶层模块
(4)添加引脚和其它基本单元
(5)根据表3.1分配FPGA管脚
(6)器件和管脚的其它设置
将没有用到的管脚设置为三态输入。
3)设置编译选项并编译硬件系统
(1)设置编译选项
(2)编译硬件系统
在ProjectNavigator窗口的File标签中的led_test.bdf文件单击鼠标右键,在弹出的对话框中单击SetasTop-levelEntiy选项。
将led_test.bdf设置为顶层实体。
选择Processing→StartCompilation进行全程编译,并改正出现的错误。
出现的警告信息忽略不计。
(3)查看编译报告
4)下载硬件设计到目标FPGA
使用下载电缆连接实验箱的JTAG口与主计算机,接通实验箱电源。
下载生成的led_test.sof文件。
5)观察LED的状态
五、实验程序
moduleled(led);
output[7:
0]led;
assignled=8'
b10101010;
endmodule
六、结果分析
观察LED的状态,LED1,LED3,LED5,LED7,四个发光二极管亮。
由于实验箱上发光二极管共阳级,所以当相应引脚输出为低电平时,发光二极管亮。
可以修改程序中的assign语句中的led的取值,实现将不同位置的led灯的点亮。
实验二流水灯实验
通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VerilogHDL的编程方法。
学习简单时序电路的设计和硬件测试。
本实验的内容是建立可用于控制LED流水灯的简单硬件电路,要求在SmartSOPC实验箱上实现LED1-LED8发光二级管流水灯显示。
(1)在LED1-LED8引脚上周期性的输出流水数据,如原来输出的数据是11111100则表示点亮LED1、LED2,流水一次后,输出的数据应该为11111000,而此时则应点亮LED1-LED3三个LED发光二级管。
就可以实现LED流水灯。
为了观察方便,流水速率最好在2Hz左右。
(2)int_div分频模块说明:
int_div模块是一个占空比为50%的任意整数分频器。
输入时钟为clock,输入时钟为clk_out。
更改F_DIV和F_DIV_WIDTH的参数值即可实现不同的分频系数。
(3)系统框图如下:
1)启动QuartusII建立一个空白工程,然后命名为led_water.qpf(具体步骤参见实验一)。
2)新建VerilogHDL源程序文件ledwater.v,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
3)从设计文件创建模块,由ledwater.v生成名为ledwater.bsf的模块符号文件。
4)将光盘中EDA_Component目录下的int_div.bsf和int_div.v拷贝到工程目录文件夹中。
5)新建图形设计文件命名为led_water.bdf并保存。
6)选择目标器件并对相应的引脚进行锁定。
7)将led_water.bdf设置为顶层实体。
对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
8)最后拿出跳线短接帽跳接到SmartSOPC实验箱上JP6的LED0-LED7,使LED1-LED8分别与FPGA引脚50、53-55、176和47-49相连。
拿出AlteraByteBlasterII下载电缆,并将此电缆的两端分别接到PC机的打印机并口和QuickSOPC核芯板上的JTAG下载口上,打开电源,执行下载命令,把程序下载到FPGA器件中,此时,即可在SmartSOPC实验箱上看到流水灯。
9)更改分频模块(int_div)的分频系数,并重新编译下载,观察流水灯的变化。
moduleledwater(led,clk);
inputclk;
reg[8:
0]led_r;
assignled=led_r[7:
0];
always@(posedgeclk)
begin
led_r<
=led_r<
<
1;
if(led_r==9'
d0)
=9'
b111111111;
end
自己写的分频模块:
modulefenpin_48MHz(sclk,clkout);
inputsclk;
outputclkout;
reg[15:
0]Q;
always@(posedgesclk)
if(Q>
=16'
d4800000)Q<
=16'
d0;
Q<
=Q+1'
b1;
end
assignclkout=(Q==16'
d2400000)?
1'
b1:
b0;
观察实验箱上的led灯按照led1~led8的顺序依次点亮无限循环,从左向右依次点亮。
更改分频系数,修改F_DIV和F_DIV_WIDTH的值,如F_DIV=48000000,F_DIV_WIDT=26,则led灯点亮速度较之前有所减慢。
若将程序中led_r<
=led_r<
1;
改为led_r<
=led_r>
>
则即可实现流水方向的改变。
除了使用图形文件的顶层文件格式也可使用文本文件。
示例程序如下:
moduletopled(clock,led);
inputclock;
output[7:
0]led;
wirep;
int_divu1(.clock(clock),.clk_out(p));
ledwateru2(.clk(p),.led(led));
实验三键盘、LED发光实验
通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VerilogHDL的编程方法,熟悉以VerilogHDL文件为顶层模块的设计。
学习和体会分支条件语句case的使用方法及FPGAI/O口的输出控制。
本实验的内容是要求在SmartSOPC实验箱上完成对8个键盘KEY1-KEY8进行监控,一旦有键输入判断其键值,并点亮相应个发光二级管,如若KEY3按下,则点亮LED1-LED3发光管。
FPGA的所有I/O控制块允许每个I/O引脚单独配置为输入口,不过这种配置是系统自动完成的,一旦该I/O口被设置为输入口使用时(如定义key0为输入引脚:
inputkey0;
),该I/O控制模块将直接使三态缓冲区的控制端接地,使得该I/O引脚对外呈高阻态,这样该I/O引脚即可用作专用输入引脚。
只要正确分配并锁定引脚后,一旦在KEY1-KEY8中有键输入,在检测到键盘输入的情况下,继续判断其键盘值并作出相应的处理。
1)启动QuartusII建立一个空白工程,然后命名为keyled.qpf(具体步骤参见实验一)。
2)新建VerilogHDL源程序文件keyled.v,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
3)选择目标器件并对相应的引脚进行锁定。
4)对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
5)最后拿出跳线短接帽跳接到JP6的LED0-LED7、KEY1-KEY8使LED1-LED8和KEY1-KEY8和芯片对应的引脚相连。
拿出下载电缆,并将此电缆的两端分别接到PC机的并口和QuickSOPC核芯板上的JTAG下载口上,打开电源,执行下载命令,把程序下载到FPGA器件中,观察发光管LED1-LED8的亮灭状态,按下KEY1-KEY8的任一键,再次观察发光管的状态。
modulekeyled(key,led);
input[7:
0]key;
reg[7:
0]buffer_r;
assignled=led_r;
always@(key)
buffer_r=key;
case(buffer_r)
8'
b11111110:
led_r=8'
b11111110;
b11111101:
b11111100;
b11111011:
b11111000;
b11110111:
b11110000;
b11101111:
b11100000;
b11011111:
b11000000;
b10111111:
b10000000;
b01111111:
b00000000;
default:
led_r=8'
b11111111;
endcase
程序下载后管擦发光管led1到led8处于不亮状态,按下key1,led1亮,按下key2,led1和led2亮按下key3则led1到led3亮;
按下key4则led1到led4都亮实现键盘控制led亮灯。
由于核心板只有4个按键所以只能测试key1-key4的功能。
实验四静态数码管显示实验
学习7段数码管显示译码器的设计,进一步了解、熟悉和掌握FPGA开发软件QuartusII的使用方法及VerilogHDL的编程方法,学习LPM兆功能模块的调用。
本实验的内容是建立7段译码显示模块,用于控制LED数码管的静态显示。
要求在SmartSOPC实验箱上的数码管依次显示0-9和A-F的16个字符。
(1)常见的数码管有共阴和共阳2中,共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,共阳级数码管是将8个发光二极管的阳极连接在一起最为公共端。
公共端常被称作位码,而将其他的8位作段码。
(2)本实验通过分频模块int_div分频得到1Hz的频率信号,加载于4位计数器的时钟输入端,计数循环输出0-9、A-F16个数。
最后通过七段译码模块译码后在数码管上显示出来。
1)启动QuartusII建立一个空白工程,然后命名为sled.qpf(具体步骤参见实验一)。
2)新建VerilogHDL源程序文件decl7s.v,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
3)从设计文件创建模块,由decl7s.v生成名为decl7s.bsf的模块符号文件。
4)将光盘中EDA_Component目录下的int_div.bsf和int_div.v拷贝到工程目录。
5)添加4位计数器兆功能模块。
从Tools→MegaWizardPlug-InManager…打开添加兆功能模块向导,新建兆功能模块。
6)新建图形设计文件命名为sled.bdf并保存。
7)选择目标器件并对相应的引脚进行锁定。
8)将sled.bdf设置为顶层实体。
9)硬件连接、下载程序。
moduledecl7s(d,seg);
input[3:
0]d;
0]seg;
0]seg_r;
assignseg=seg_r;
always@(d)
case(d)
4'
h0:
seg_r=8'
hc0;
h1:
hf9;
h2:
ha4;
h3:
hb0;
h4:
h99;
h5:
h92;
h6:
h82;
h7:
hf8;
h8:
h80;
h9:
h90;
ha:
h88;
hb:
h83;
hc:
hc6;
hd:
ha1;
he:
h86;
hf:
h8e;
下载后,观察数码管,8个数码管循环显示00000000~FFFFFFFF,本实验用共阳极数码管,某个段输出低电平‘0’,则相应段就亮。
可修改程序中4’h0:
seg_r等式右边数值,显示其他字母符号,如seg_r=8’h89则输出HHHHHHHH
实验五动态数码管显示实验
学习动态扫描显示的原理及电路的设计。
本实验的内容是建立数码管动态扫描显示模块,具体内容如下:
1)在实验箱上完成LED数码管的动态显示“1-8”8个数字。
2)放慢扫描速度演示动态显示的原理过程。
8个数码管,其中每个数码管的8个段:
a、b、c、d、e、f、g、h都分别连到seg0-seg7,8个数码管分别由8个连通信号dig0-dig7来选择。
被选通的数码管显示数据,其余关闭。
如果希望8个数码管显示希望的数据,就必须使得8个选通信号dig0-dig7分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数据管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。
虽然每次只有一个LED显示,但只要扫描显示速率够快,由于人的视觉余辉效应,使我们仍然会感觉所有的数码管都在同时显示。
1)启动QuartusII建立一个空白工程,然后命名为dled.qpf(具体步骤参见实验一)。
2)新建VerilogHDL源程序文件scan_led.v,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
3)从设计文件创建模块,由scan_led.v生成名为scan_led.bsf的模块符号文件。
5)添加常量兆功能模块。
6)新建图形设计文件命名为dled.bdf并保存。
将dled.bdf设置为顶层实体。
硬件连接、下载程序。
8)观察LED数码管上的数字是否为“12345678”,然后把分频模块的参数改为F_DIV_WIDTH:
25,再重新编译下载,观察这次LED数码管上的显示数据,可以看到数据“12345678”动起来了,这正是动态扫描的方法和过程。
modulescan_led(clk_1k,d,dig,seg);
inputclk_1k;
input[31:
0]dig;
0]dig_r;
reg[3:
0]disp_dat;
reg[2:
0]count;
assigndig=dig_r;
always@(posedgeclk_1k)
count<
=count+1'
always@(posedgeclk_1k)
case(count)
3'
d0:
disp_dat=d[31:
28];
d1:
disp_dat=d[27:
24];
d2:
disp_dat=d[23:
20];
d3:
disp_dat=d[19:
16];
d4:
disp_dat=d[15:
12];
d5:
disp_dat=d[11:
8];
d6:
disp_dat=d[7:
4];
d7:
disp_dat=d[3:
dig_r=8'
b01111111;
b10111111;
b11011111;
b11101111;
b11110111;
b11111011;
b11111101;
endcase
always@(disp_dat)
case(disp_dat)
程序下载后观察数码管现实的数字为12345678,一直显示无变化,无变动实际上1~8个数在依次显示且不断循环,因为频率高扫描速度快,人眼感觉不到,感觉所有数码管都在同时显示。
修改分频模块的参数F_DIV:
48000000,F_DIV_WIDTH:
26,重新编译下载观察数码管,则可以看到“12345678”,八个数字依次轮流显示每次值有1个数码管显示其余不显示。
可以看到当分频达到1KHz左右时人眼就感觉不到数码管的闪烁,给人一种静态显示的错觉,“眼见未必是真”。
实验十数控分频器的设计
学习数控分频器的设计,分析和测试方法。
在实验箱上实现数控分频器的设计,在clk输入64khz的频率信号(由int_div模块分频得到)或更高;
输出Fout接蜂鸣器,由KEY1/KEY2控制8位预置数并在数码管1-2上显示。
数控分频器的功能就是当输入端输入不同的数据时,产生不同的分频比,从而产生不同的频率值,本例是用计数值可并行预置的加法计数器设计完成,方法是将计数溢出位与预置数加载输入信号相接即可。
1)启动QuartusII建立一个空白工程,然后命名为dvf.qpf。
2)将pulse.v、key_led.v、int_div.v文件加入工程。
3)新建VerilogHDL源程序文件dvf.v,设置dvf.v为顶层文件,并保存。
4)分配引脚,将未使用的管教设置为三态输入。
5)对该工程文件进行全程编译处理。
6)下载程序到FP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CPLD 汽车 尾灯 控制器 设计 报告