FPGA课程设计报告

FPGA课程设计报告
FPGA课程设计报告

北京理工大学

FPGA课程设计报告

题目:基于CPLD的1602字符液晶显示系统设计

院系:基础教育学院

班级: 04111201 学号: 1120120924 学生姓名:李思佳

指导教师:杨爱英

成绩:

2013年5月

基于CPLD的1602字符液晶显示系统设计

一.设计题目:

基于CPLD的1602字符液晶显示系统设计

二.设计要求技术指标:

要求用1602液晶显示字符;

显示内容:学号+英文姓名;

显示方式:流动显示,开关控制字符流动速度及方向;具有暂停和清

屏的功能;

三.设计平台:

QUARTUSII 6.0软件 MARS-1270 CPLD 1602液晶

四.设计思路与设计步骤:

1.1602液晶指令介绍:

要想控制1602液晶显示字符,首先需要弄清楚1602有那些可控管脚,有哪些控制命令,如何控制其显示,如何控制其移动及如何控制其移动速度及方向等,下面首先介绍一下我所要用的指令及管脚等。

(1)接口说明:

(2)基本操作时序:

A.读状态:输入:RS=L,RW=H,E=H, 输出:DB0--DB7=状态字

B.写指令:输入:RS=L,RW=L,E=下降沿脉冲,DBO--DB7=指令码, 输出:无

C.读数据:输入:RS=H,RW=H,E=H,输出:DB0--DB7=数据

D.写数据:输入:RS=H,RW=L,E=下降沿脉冲,DBO--DB7=数据, 输出:无

(3)指令集及其设置说明:

A.清屏指令:

功能:<1> 清除液晶显示器即将DDRAM 的内容全部填入"空白"的ASCII码20H;

<2> 光标归位,即将光标撤回液晶显示屏的左上方;

<3> 将地址计数器(AC)的值设为0。

B.进入设置模式指令:

功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:

位名设置

I/D 0=写入新数据后光标左移 1=写入新数据后光标右移 S 0=写入新数据后显示屏不移 1=写入新数据后显示屏整体右移1字符

C.显示开关控制指令:

功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:

位名设置

D 0=显示功能关 1=显示功能开

C 0=无光标 1=有光标

B 0=光标闪烁 1=光标不闪烁

D.设定显示屏或光标移动方向指令:

功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:

S/C R/L 设定情况

0 0 光标左移1格,且AC值减1

0 1 光标右移1格,且AC值加1

1 0 显示器上字符全部左移一格,但光标不动

1 1 显示器上字符全部右移一格,但光标不动

E.功能设定指令:

功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:位名设置

DL 0=数据总线为4位 1=数据总线为8位

N 0=显示1行 1=显示2行

F 0=5×7点阵/每字符 1=5×10点阵/每字符

F.设定CGRAM地址指令:

功能:设定下一个要存入数据的CGRAM的地址。

DB5DB4DB3 为字符号,也就是你将来要显示该字符时要用到的字符地址。(000~111)(能定义八个字符)

DB2DB1DB0为行号。(000~111)(八行)

G.设定DDRAM地址指令;

功能:设定下一个要存入数据的DDRAM的地址。

H.数据写入DDRAM或CGRAM指令:

功能:<1> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;

<2> 将使用者自己设计的图形存入CGRAM。

DB7DB6DB5可为任何数据,一般取“000”。

DB4DB3DB2DB1DB0对应于每行5点的字模数据。

2.设计流程:

弄懂1602中各种管脚及其控制方法以及各种指令的指令码后,就可以进行程序的编写了,首先整理一下编写流程:

初始化

设置状态

状态转换

3.设计源程序:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity lcd_1602 is

Port ( clk : in std_logic;

reset:in std_logic;

lcdrs : out std_logic; --读或写指令|数据控制端

lcdrw : out std_logic; --读|写控制端

lcden : buffer std_logic; --使能端

data : out std_logic_vector(7 downto 0);

key1: in std_logic; --拨码开关控制移动与不动;

key2: in std_logic);

end lcd_1602;

Architecture Behavioral of lcd_1602 is

Type state is

(set_qingping,set_nobusy,set_cursor,set_switch,set_ddram,write_data,s

et_ddram1,write_data1,set_ddram2,write_data2,set_ddram3,write_data3,s

et_ddram4,write_data4,set_ddram5,write_data5, set_ddram6,write_data6,

set_ddram7,write_data7,set_ddram8,write_data8,set_ddram9,write_data9, set_ddram10,write_data10,set_ddram11,write_data11,set_ddram12,write_d

ata12,set_ddram13,write_data13,set_ddram14,write_data14,set_ddram15,w

rite_data15,set_ddram17,write_data17,set_ddram16,write_data16,set_ddr

am18, write_data18,set_ddram19,write_data19,set_ddram20,write_data20, set_ddram21,write_data21,set_ddram22,write_data22,set_ddram23,write_d

ata23,set_cgram,write_cgram,set_ddram24,write_data24,set_ddram25,writ

e_data25,shift_cur,shift_display); --定义各种状态

type ram2 is array(0 to 7) of std_logic_vector(7 downto 0);

constant cgram:ram2:=(("00011111"),("00000100"),("00000100"),

("00011111"),("00000100"),("00000100"),("00000100"),("00011111"));

--把“王”字字模写入数组;

signal current_state:state;

signal clkcnt: std_logic_vector(18 downto 0);

Constant divcnt:std_logic_vector(18 downto 0):="1111001110001000000";

signal clkdiv: std_logic;

signal tc_clkcnt: std_logic;

signal clk_int: std_logic;

signal clkdiv2: std_logic;

signal clkdiv3: std_logic;

signal clkdiv6: std_logic;

begin

lcdrw <= '0' ; --读写控制端设为写有效

process(clk,reset)

Begin

if(reset='0')then

clkcnt<="0000000000000000000";

elsif(clk'event and clk='1')then

if(clkcnt=divcnt)then

clkcnt<="0000000000000000000";

else

clkcnt<=clkcnt+1; --对系统时钟进行分频使其工作周期为12.5ms

end if;

end if;

end process;

tc_clkcnt<='1' when clkcnt=divcnt else '0'; --tc_clkcnt为12.5ms

process(tc_clkcnt,reset)

begin

if(reset='0')then

clkdiv<='0';

elsif(tc_clkcnt'event and tc_clkcnt='1')then

clkdiv<=not clkdiv; --进一步分频使clkdiv=2*12.5ms;

end if;

end process;

process(clkdiv,reset)

begin

if(reset='0')then

clk_int<='0';

elsif(clkdiv'event and clkdiv='1')then

clk_int<= not clk_int; --再进一步分频使clk_int=4*12.5ms

end if;

end process;

process(clk_int,reset)

begin

if(reset='0')then

clkdiv2<='0'; --再进一步分频使clkdiv2=8*12.5ms elsif(clk_int'event and clk_int='1')then

clkdiv2<= not clkdiv2;

end if;

end process;

process(clkdiv2,reset)

begin

if(reset='0')then

clkdiv3<='0'; --再进一步分频使clkdiv3=16*12.5ms elsif(clkdiv2'event and clkdiv2='1')then

clkdiv3<= not clkdiv3;

end if;

end process;

process(clkdiv3,reset)

begin

if(reset='0')then

clkdiv6<='0'; --还是进一步分频使clkdiv6=32*12.5ms elsif(clkdiv3'event and clkdiv3='1')then

clkdiv6<= not clkdiv6;

end if;

end process;

process(clkdiv3,reset)

begin

if(reset='0')then

lcden<='0';

elsif(clkdiv3'event and clkdiv3='0')then

lcden<= not lcden; --设置使能信号频率

end if;

end process;

附注:进行多次分频的目地是为了使字符显示速度及移动速度等合适,便于观察。control:process(clk,reset,current_state)

variable cnt1: std_logic_vector(3 downto 0); --控制各种状态及其转换begin

if reset='0'then

current_state<=set_nobusy ;

cnt1:=(others => '1');

lcdrs<='0';

elsif rising_edge(clkdiv6)then

--使用clkdiv6是为了和lcden吻合,达到使能目地

current_state <= current_state ;

lcdrs <= '0';

case current_state is

when set_nobusy=> --测试空闲状态

data<="00111000";--38H

current_state<=set_cursor;

when set_cursor=>

data<="00000110"; --进入模式设置状态写入新数据后光标右移

current_state<=set_switch;

when set_switch=>

data<="00001100"; --显示开关控制状态;显示功能开

current_state<=set_qingping;

when set_qingping=>

data<="00000001"; --清屏指令

current_state<=set_ddram;

when set_ddram=>

data<="10000000"; --设置要显示数据的位置:第1行第1列80H

current_state<=write_data;

when write_data=>

lcdrs<='1';

data<="00110001";--设置要显示的数据1

current_state<=set_ddram1;

when set_ddram1=>

lcdrs<='0'; -- 设置要显示数据的位置:第1行第2列81H

data<="10000001";

current_state<=write_data1;

when write_data1=>

lcdrs<='1'; --设置要显示的数据2

data<="00110010";

current_state<=set_ddram2;

when set_ddram2=>

lcdrs<='0'; -- 设置要显示数据的位置:第1行第3列82H

data<="10000010";--82H

current_state<=write_data2;

when write_data2=>

lcdrs<='1'; --设置要显示的数据8

data<="00111000";

current_state<=set_ddram3;

when set_ddram3=>

lcdrs<='0';-- 设置要显示数据的位置:第2行第4列83H

data<="10000011";

current_state<=write_data3;

when write_data3=>

lcdrs<='1'; --设置要显示的数据8

data<="00111000";

current_state<=set_ddram4;

when set_ddram4=>

lcdrs<='0'; -- 设置要显示数据的位置:第1行第5列84H

data<="10000100";--82H

current_state<=write_data4;

when write_data4=>

lcdrs<='1'; --设置要显示的数据4

data<="00110100";

current_state<=set_ddram5;

when set_ddram5=>

lcdrs<='0';

data<="10000101"; -- 设置要显示数据的位置:第1行第6列85H current_state<=write_data5;

when write_data5=>

lcdrs<='1';

data<="00110000"; --设置要显示的数据0

current_state<=set_ddram6;

when set_ddram6=>

lcdrs<='0';

data<="10000110";-- 设置要显示数据的位置:第1行第7列86H

current_state<=write_data6;

when write_data6=>

lcdrs<='1'; --设置要显示的数据1

data<="00110001";

current_state<=set_ddram7;

when set_ddram7=>

lcdrs<='0';

data<="10000111";-- 设置要显示数据的位置:第1行第8列87H

current_state<=write_data7;

when write_data7=>

lcdrs<='1'; --设置要显示的数据5

data<="00110101";

current_state<=set_ddram8;

when set_ddram8=>

lcdrs<='0';

data<="10001000";-- 设置要显示数据的位置:第1行第9列88H

current_state<=write_data8;

when write_data8=>

lcdrs<='1';

data<="00101101"; --设置要显示的数据-

current_state<=set_ddram9;

when set_ddram9=>

lcdrs<='0';

data<="10001001";-- 设置要显示数据的位置:第1行第10列89H current_state<=write_data9;

when write_data9=>

lcdrs<='1';

data<="01011010"; --设置要显示的数据Z

current_state<=set_ddram10;

when set_ddram10=>

lcdrs<='0';

data<="10001010";-- 设置要显示数据的位置:第1行第11列90H current_state<=write_data10;

when write_data10=>

lcdrs<='1';

data<="01000111"; --设置要显示的数据G

current_state<=set_ddram11;

when set_ddram11=>

lcdrs<='0';

data<="10001011";-- 设置要显示数据的位置:第1行第12列91H current_state<=write_data11;

when write_data11=>

lcdrs<='1';

data<="01001100"; --设置要显示的数据L

current_state<=set_ddram12;

when set_ddram12=>

lcdrs<='0';

data<="11000000";-- 设置要显示数据的位置:第2行第1列C0H current_state<=write_data12;

when write_data12=>

lcdrs<='1'; --设置要显示的数据1

data<="00110001";

current_state<=set_ddram13;

when set_ddram13=>

lcdrs<='0';

data<="11000001";-- 设置要显示数据的位置:第2行第2列C1H

current_state<=write_data13;

when write_data13=>

lcdrs<='1'; --设置要显示的数据2

data<="00110010";

current_state<=set_ddram14;

when set_ddram14=>

lcdrs<='0';

data<="11000010";-- 设置要显示数据的位置:第2行第3列C2H

current_state<=write_data14;

when write_data14=>

lcdrs<='1'; --设置要显示的数据8

data<="00111000";

current_state<=set_ddram15;

when set_ddram15=>

lcdrs<='0';

data<="11000011";-- 设置要显示数据的位置:第2行第4列C3H

current_state<=write_data15;

when write_data15=>

lcdrs<='1';

data<="00111000";--设置要显示的数据8

current_state<=set_ddram16;

when set_ddram16=>

lcdrs<='0';

data<="11000100";-- 设置要显示数据的位置:第2行第5列C4H

current_state<=write_data16;

when write_data16=>

lcdrs<='1'; --设置要显示的数据4

data<="00110100";

current_state<=set_ddram17;

when set_ddram17=>

lcdrs<='0';

data<="11000101";-- 设置要显示数据的位置:第2行第6列C5H

current_state<=write_data17;

when write_data17=>

lcdrs<='1'; --设置要显示的数据0

data<="00110000";

current_state<=set_ddram18;

when set_ddram18=>

lcdrs<='0';

data<="11000110";-- 设置要显示数据的位置:第2行第7列C6H

current_state<=write_data18;

when write_data18=>

lcdrs<='1'; --设置要显示的数据2

data<="00110010";

current_state<=set_ddram19;

when set_ddram19=>

lcdrs<='0';

data<="11000111";-- 设置要显示数据的位置:第2行第8列C7H

current_state<=write_data19;

when write_data19=>

lcdrs<='1'; --设置要显示的数据8

data<="00111000";

current_state<=set_ddram20;

when set_ddram20=>

lcdrs<='0';

data<="11001000";-- 设置要显示数据的位置:第2行第9列C8H

current_state<=write_data20;

when write_data20=>

lcdrs<='1'; --设置要显示的数据-

data<="00101101";

current_state<=set_ddram21;

when set_ddram21=>

lcdrs<='0';

data<="11001001";-- 设置要显示数据的位置:第2行第10列C9H current_state<=write_data21;

when write_data21=>

lcdrs<='1'; --设置要显示的数据X

data<="01011000";

current_state<=set_ddram22;

when set_ddram22=>

lcdrs<='0';

data<="11001010";-- 设置要显示数据的位置:第2行第11列CAH

current_state<=write_data22;

when write_data22=>

lcdrs<='1'; --设置要显示的数据H

data<="01001000";

current_state<=set_ddram23;

when set_ddram23=>

lcdrs<='0';

data<="11001011";-- 设置要显示数据的位置:第2行第12列CBH current_state<=write_data23;

when write_data23=>

lcdda<='1'; --设置要显示的数据Y

data<="01011001";

current_state<=set_cgram;

when set_cgram=>

lcdda<='0';

data<="01000000"; --设定CGRAM地址指令;

current_state<=write_cgram;

when write_cgram=>

lcdda<='1';

cnt1:=cnt1+1; --向CGRAM中写入“王”字;

data<=cgram(conv_integer(cnt1));

if cnt1 = "1000" then

current_state<=set_ddram24;

end if;

when set_ddram24=>

lcdda<='0'; --设定王字的显示位置第1行第13列 92H

data<="10001100";

current_state<=write_data24;

when write_data24=>

lcdda<='1'; --设置要显示的王字

data<="00000000";

current_state<=set_ddram25;

when set_ddram25=>

lcdda<='0'; --设定王字的显示位置第2行第13列 CCH

data<="11001100";

current_state<=write_data25;

when write_data25=>

lcdda<='1'; --设置要显示的王字

data<="00000000";

if key1='1' then

current_state<=shift_cur;

elsif key2='1' then

current_state<=shift_display;

end if;

when shift_cur=>

lcdda<='0';

data<="00010100";

current_state<=shift_cur;

when shift_display=>

lcdda<='0';

data<="00011100";

when others=>null;

end case;

end if;

end process;

end Behavioral;

4.设计结果:

显示12884015-ZGL王

12884028-XHY 王

5.自定义汉字显示:

步骤如下:

1.先将自定义字符或汉字写入CGRAM,如下图定义A的字模一样所示:如果想自定义一个"十",则八行的字符串构成一个数组,每个元素是一个八位的二进制字符串,则十所构成的字模为(不够八位的前三位补零):

data[8]=(“00000100”,“00000100”,“00000100”,“00011111”,“00000100”,“00000100”,“00000100”,“00000100”,)

把这个数组写到CGRAM中某一个位置中,比如第一个留下来的位置中,则这个“十”字就可以和CGROM中已有的字符一样的显示到液晶中了。

共七行(剩余略去)

五.设计总结:

要想控制1602液晶显示,首先需要了解1602的各种参数指令及控制,其次就是需要熟悉QUARTUSII 6.0软件的用法,会使用VHDL语言来编写程序控制,在写程序时还需注意各种状态之间的转换,特别注意时钟的协调设置,程序比较长,比较繁琐,要注意有耐心且一定要细心认真。

六.设计体会:

通过这一周的忙碌,终于把我和组员的学号及姓名的首字母成功的显示到了1602液晶上,通过这次课程设计,我们组再一次巩固了FPGA的有关知识,更深入的掌握了VHDL语言的用法,更重要的是我们学会了利用mars-1270编写程序去控制1602液晶显示,掌握了1602的各种指令及控制方法,虽然很累,中间遇到了很多困难,但在老师和同学的帮助下,最终还是完成了,我们很满意。过程很累,程序很繁琐,让人看着头疼,但在老师和同学的鼓励和帮助下,最终胜利完成任务的感觉还是非常好的,再次感谢郑老师和田同学的耐心帮助。

附:

CGROM中部分字符码与部分字符字模关系对照表:

参考文献:

1.CPLD/FPGA设计及应用罗朝霞高书莉著人民邮电出版社

2.液晶LCD1602中文资料 https://www.360docs.net/doc/b51438072.html,/ball648500361

3.单片机及接口技术

4.EDA技术及应用谭会生著西安电子科技大学出版社

5.1602字符液晶 https://www.360docs.net/doc/b51438072.html,/view/1871999.htm

6. LCD1602液晶中文资料(最新)

https://www.360docs.net/doc/b51438072.html,/view/b1c0aeff04a1b0717fd5dd2b.html

fpga数字钟课程设计报告

f p g a数字钟课程设计报告 Prepared on 24 November 2020

课程设计报告 设计题目:基于FPGA的数字钟设计 班级:电子信息工程1301 姓名:王一丁 指导教师:李世平 设计时间:2016年1月 摘要 EDA(Electronic Design Automation)电子设计自动化,是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成软件方式设计得电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次课程设计利用Quartus II 为设计软件,VHDL为硬件描述语言,结合所学知识设计一个多功能时钟,具有显示年、月、日、时、分、秒显示,计时,整点报时,设定时间等功能。利用硬件描述语言VHDL 对设计系统的各个子模块进行逻辑描述,采用模块化的思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑综合优化、逻辑仿真、最终完成本次课程设计的任务。 关键词:EDA VHDL语言数字钟 目录 摘要 1 课程设计目的 2 课程设计内容及要求

设计任务 设计要求 3 VHDL程序设计 方案论证 系统结构框图 设计思路与方法 状态控制模块 时分秒模块 年月日模块 显示模块 扬声器与闹钟模块 RTL整体电路 4 系统仿真与分析 5 课程设计总结,包括.收获、体会和建议 6 参考文献 1 课程设计目的 (1)通过设计数字钟熟练掌握EDA软件(QUARTUS II)的使用方法,熟练进行设计、编译,为以后实际工程问题打下设计基础。 (2)熟悉VHDL 硬件描述语言,提升分析、寻找和排除电子设计中常见故障的能力。 (3)通过课程设计,锻炼书写有理论根据的、实事求是的、文理通顺的课程设计报告。

FPGA设计的报告课程设计

FPGA课程设计 实 验 报 告

实验一:设计一个可控的100进制可逆计数器 一、实验要求 用DE2-115开发板下载。 (1)计数器的时钟输入信号周期为200ns。 (2)以十进制形式显示。 (3)有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用 clr plus minus 功能 0 ××复位为0 1 1 0 递增计数 1 0 1 递减计数 1 1 1 暂停计数 二、关键词 可控制、可逆、100进制、复位、暂停、递增、递减 三、内容摘要 module updown_count(qout,reset,clk,plus,minus); output[7:0] qout;/*定义一个8位的输出,其目的是 低四位和高四位分别表示计数器的个位和十位。*/ input clk,plus,minus,reset;//定义四个输入,时钟,加计数,减计数和清零 reg[7:0] qout;//qout的数据类型为寄存器型 always @(posedge clk)//当clk上升沿到来时执行一遍下列程序 begin if(!reset) qout<=0;//当reset为低电平时,计数器执行清零功能,否则跳过else begin case({minus,plus})//case语句模块,包含加,减和暂停四个模块 2'b10: if (qout[3:0]==0)//判断个位是否为零,若不为零,跳到个位减一begin qout[3:0]<=9;//给个位赋值 if(qout[7:4]==0) qout[7:4]<=9;//判断十位是否为零,并且给十位赋值 else qout[7:4]<=qout[7:4]-1;//由于个位赋9,相当于向十位借一,因而十位减一end else qout[3:0]<=qout[3:0]-1;//个位减一 /*这一部分是减计数模块,其思路是:首先判断个位是否为零,若为零,则执行后面的程序,个位直接赋9,并且十位减一;否则个位减一*/ 2'b01: if (qout[3:0]==9)//判断个位是否为9,否则跳到个位加一begin

FPGA课程设计题目

1、彩灯控制器设计 内容及要求: 设计一个彩灯控制器,具体设计要求如下: (1)要有多种花型变化(至少设计5种),led至少16路 (2)多种花型可以自动变化 (3)彩灯变换的快慢节拍可以选择 (4)具有清零开关 (5)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 2、数字秒表设计 内容及要求: 设计一用于体育比赛的数字秒表,具体设计要求如下: (1)6位数码管显示,其中两位显示min,四位显示see,显示分辨率为0.01 s。 (2)秒表的最大计时值为59min59.99see。 (3)设置秒表的复位/启动键,按一下该键启动计时,再按即清0。依此循环。 (4)设置秒表的暂行/继续键。启动后按一下暂行,再按继续。依此循环。 (5)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 3、交通信号控制系统设计 内容及要求: 设计一个十字路口交通控制系统,具体设计要求如下: (1)东西(用A表示)、南北(用B表示)方向均有绿灯、黄灯、红灯指示,其持续时间分别是40秒、5秒和45秒, 交通灯运行的切换示意图和时序图分别如图1、图2所示。 (2)系统设有时钟,以倒计时方式显示每一路允许通行的时间。 (3)当东西或南北两路中任一路出现特殊情况时,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。 图1 交通灯运行切换示意图

B红 CP A绿 A黄 A红 B黄 B绿 5S 5S 图2 交通灯时序图 (4)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 4、简易密码锁设计 内容及要求 设计一个4位串行数字锁。 (1)开锁代码为4位二进制,当输入代码的位数与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮一个指示灯。否则进入“错误”状态,并发出报警信号。 (2)锁内的密码可调,且预置方便,保密性好。 (3)串行数字锁的报警由点亮一个灯,直到按下复位开关,报警才停下。此时,数字锁又自动等待下一个开锁状态。 (4)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 5、出租车计价器设计 内容及要求 (1)设一个出租车自动计费器,计费包括起步价、行驶计费和等待计费三个部分,用4个数码管显示出金额数目,最大值为999.9元,最小计价单位为0.1元。行驶里程在3公里范围内且等待时间未超过三分钟时按起步价8元计费;行驶里程超过三公里后按每公里2元收费;等待时间超过三分钟后按每分钟1元收费。等待时间用两个数码管显示,最大值为59分钟。 总费用=起步价+(里程-3km )*里程单价+(等待时间-3)*等候单价 (2)能够实现的功能: 显示汽车行驶里程:用四位数字显示,单位为km 。 计程范围为0~99km ,计程分辨率为1km 。 显示等候时间:用两位数字显示分钟,单位为min 。计时范围为0~59min ,计时分辨率为1min 。

FPGA课程设计报告

F P G A 课 程 设 计 报 告 学部:信息科学与技术学部 专业:通信工程 班级:10级1班 学号:100103011125 姓名:万洁 指导老师:祝宏 合作伙伴:张紫君 2012.12.13

一.《任务书》: 实验一100进制的可逆计数器(11——12周)实验二交通灯控制系统(15周) 实验三多功能数字钟系统(14-15周)二.实验书写格式: 一:题目要求 二:程序代码 三:操作步骤及运行结果截图 四:心得体会 三.实验附录: 一:老师提供的资源 二:关于实验所用EP4CE115F29板的简介

实验一100进制的可逆计数器 一、设计一个可控的100进制可逆计数器,要求用实验箱下载。 (1)计数器的时钟输入信号周期为200ns。 (2)以十进制形式显示。 (3)有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用下,计数器具有复位、增或减计数、暂停功能。 clr plus minus 功能 0 ××复位为0 1 1 0 递增计数 1 0 1 递减计数 1 1 1 暂停计数 二、程序如下: module keni100(CLR,CLK,PLUS,MINUS,OUT); //100进制的可逆计数器 input CLR,PLUS,MINUS,CLK; output [7:0]OUT; reg [7:0]OUT; always@(posedge CLK) begin if(!CLR) //如果CLR为零,输出为零;反之,运行else程序 OUT[7:0]<=0; else

begin if(PLUS==0 && MINUS==1) //100进制的递减计数 begin if (OUT[3:0]==0) begin OUT[3:0]<=9; if (OUT[7:4]==0) OUT[7:4]<=9; else OUT[7:4]<=OUT[7:4]-1; end else OUT[3:0]<=OUT[3:0]-1; end if(PLUS==1 && MINUS==0) //100进制的递增计数 begin if (OUT[3:0]==9) begin OUT[3:0]<=0; if (OUT[7:4]==9) OUT[7:4]<=0; else OUT[7:4]<=OUT[7:4]+1; end else OUT[3:0]<=OUT[3:0]+1; end if(PLUS==1 && MINUS==1) OUT<=OUT; //若PLUS和MINUS都为1,暂停计数 if(PLUS==0 && MINUS==0) OUT<=0; //若都为零,输出为零end end endmodule 三、运行程序 1、在quarters II9.1输入程序 打开quarters II界面,点击file→New,在出现的对话框,如图1.1所示,选择Text File,点击OK.

(完整版)基于FPGA的温度传感器课程设计

FPGA课程设计论文 学生姓名周悦 学号20091321018 院系电子与信息工程学院 专业电子科学与技术 指导教师李敏 二O一二年5月28 日

基于FPGA的温度传感器系统设计 1引言 温度是一种最基本的环境参数,人们的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:传统的分立式温度传感器;模拟集成温度传感器;智能集成温度传感器。目前,国际上新型温度传感器正从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展。本文将介绍采用智能集成温度传感器DS18B20,并以FPGA为控制器的温度测量装置的硬件组成和软件设计,用液晶来实现温度显示。 2电路分析 系统框图如下: 第一部分:DS18B20温度传感器 美国 Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的 DS18B20 体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。 DS18B20 的主要特性:(1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电(2)独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯(3)DS18B20 支持多点组网功能,多个DS18B20 可以并联在唯一的三线上,实现组网多点测(4)DS18B20 在使用中不需要任何外

FPGA课程设计报告--简易电子琴的设计[1].doc

西安邮电大学 FPGA课程设计报告 题目:简易电子琴设计及FPGA功能验证 院系: 专业班级: 学生姓名: XX 导师姓名: XX 起止时间: 2012、6、18至2012、6、29

一、课程设计任务: 本设计一个简易电子琴,具体功能如下: 1、具有手动弹奏和自动播放功能; 2、以按键或开关作为电子琴的琴键,输出7个音节的音阶; 3、可以自动播放曲目至少两首。 二、课程设计目的: 1、培养综合运用知识和独立开展实践创新的能力; 2、深入学习Verilog HDL,了解其编程环境; 3、学会运用Modelsim和Quartus II等编程仿真软件; 4、将硬件语言编程与硬件实物功能演示相结合,加深理解Verilog HDL的学习; 三、使用环境: 1、软件:Modelsim和Quartus II等编程仿真软件; 2、硬件:FPGA开发板。 四、课程设计详细方案及功能验证: 1、总体实现方案: 1、简易电子琴的设计通过软硬件结合实现,硬件系统包括主控器芯片、9个按键、LED、蜂鸣器等,软件资源包括编写Verilog HDL程序的应用软件Modelsim和仿真软件Quartus II。电子琴有按键代替琴键的弹奏功能和自动播放功能。 2、整个程序总共分5个模块:主模块,按键模块,曲目1模块,曲目2模块,曲目3模块。 整个方案总共用了9个按键(key1~key9),按键key1~key7作为琴键,通过这七个按键键入不同的音阶。主模块中key8、key9两个按键用于选择是自动播放还是弹奏曲目,令mm=(key8、key9),用mm值的不同选择调用不同模块。如果mm=00,则程序调用按键模块;如果mm=01,则调用曲目1模块,播放曲目1;如果mm=10,则调用曲目2模块,播放曲目2;如果mm11,则调用曲目3模块,播放曲目3。 本次设计的框图:

(完整版)FPGA课程设计(最终版)

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:信息工程学院 题目: 电子琴的设计 课程设计目的: 《FPGA原理与应用》课程设计的目的是为了让学生熟悉基于VHDL语言进行FPGA开发的全流程,并且利用FPGA设计进行专业课程理论知识的再现,让学生体会EDA技术的强大功能,为今后使用FPGA进行电子设计奠定基础。 课程设计内容和要求 设计内容: (1)设计一个八音电子琴。 (2)由键盘输入控制音响,同时可自动演奏乐曲。 (3)用户可以将自己编制的乐曲存入电子琴,演奏时可选择键盘输入乐曲或者已存入的乐曲。 要求每个学生单独完成课程设计内容,并写出课程设计说明书、说明书应该包括所涉及到的理论部分和充足的实验结果,给出程序清单,最后通过课程设计答辩。 时间安排: 指导教师签名:年月日

系主任(或责任教师)签名:年月日

目录 摘要 (1) Abstract (2) 1设计意义和要求 (3) 1.1设计意义 (3) 1.2功能要求 (3) 2方案论证及原理分析 (4) 2.1实现方案比较 (4) 2.2乐曲实现原理 (4) 2.3系统组成及工作原理 (6) 3系统模块设计 (8) 3.1顶层模块的设计 (8) 3.2乐曲自动演奏模块的设计 (8) 3.3音阶发生器模块的设计 (9) 3.4数控分频器模块的设计 (9) 4程序设计 (11) 4.1VHDL设计语言和ISE环境简介 (11) 4.2顶层模块的程序设计 (12) 4.3乐曲自动演奏模块的程序设计 (13) 4.4音阶发生器模块的程序设计 (13) 4.5数控分频模块的程序设计 (14) 5设计的仿真与实现 (15) 5.1乐曲自动演奏模块仿真 (15) 5.2音调发生模块仿真 (18) 5.3数控分频模块仿真 (19) 5.4电子琴系统的仿真 (20) 5.5设计的实现 (22) 5.6查看RTL视图 (23) 5.7查看综合报告 (25) 6心得体会 (31) 7参考文献 (32) 8附录 (33)

FPGA课程设计报告--简易电子琴的设计

邮电大学 FPGA课程设计报告 题目:简易电子琴设计及FPGA功能验证 院系: 专业班级: 学生:XX 导师:XX 起止时间:2012、6、18至2012、6、29

一、课程设计任务: 本设计一个简易电子琴,具体功能如下: 1、具有手动弹奏和自动播放功能; 2、以按键或开关作为电子琴的琴键,输出7个音节的音阶; 3、可以自动播放曲目至少两首。 二、课程设计目的: 1、培养综合运用知识和独立开展实践创新的能力; 2、深入学习Verilog HDL,了解其编程环境; 3、学会运用Modelsim和Quartus II等编程仿真软件; 4、将硬件语言编程与硬件实物功能演示相结合,加深理解Verilog HDL的学习; 三、使用环境: 1、软件:Modelsim和Quartus II等编程仿真软件; 2、硬件:FPGA开发板。 四、课程设计详细方案及功能验证: 1、总体实现方案: 1、简易电子琴的设计通过软硬件结合实现,硬件系统包括主控器芯片、9个按键、LED、蜂鸣器等,软件资源包括编写Verilog HDL程序的应用软件Modelsim和仿真软件Quartus II。电子琴有按键代替琴键的弹奏功能和自动播放功能。 2、整个程序总共分5个模块:主模块,按键模块,曲目1模块,曲目2模块,

曲目3模块。 整个方案总共用了9个按键(key1~key9),按键key1~key7作为琴键,通过这七个按键键入不同的音阶。主模块中key8、key9两个按键用于选择是自动播放还是弹奏曲目,令mm=(key8、key9),用mm值的不同选择调用不同模块。如果mm=00,则程序调用按键模块;如果mm=01,则调用曲目1模块,播放曲目1;如果mm=10,则调用曲目2模块,播放曲目2;如果mm11,则调用曲目3模块,播放曲目3。 本次设计的框图:

FPGA课程设计

FPGA课程设计 学院: 年级专业: 学生姓名: 日期:

题目:用Verilog语言设计一个程序来控制数码管动态显示0~F 小组成员: 指导老师: 开发板:A-C8V4 芯片型号:CycloneII EP2C8Q208C8N 设计目的: 本课程设计的目的是熟练掌握相关软件的使用和操作。能对Verilog语言程序进行编译,调试,以及通过计算机仿真,得到正确的仿真波形图,并根据所得仿真波形图分析判断并改进所设计的电路。在成功掌握软件操作基础上,将所数字电路的基础课知识与Verilog语言的应用型知识结合起来并与实际设计,操作联系起来,即“理论联系实际”。深入了解Verilog语言的作用与价值,对用硬件语言设计一个电路系统开始具备一个较完整的思路与较专业的经验。对EDA技术有初步的认识,并开始对EDA技术的开发创新有初步的理解。 设计内容:利用verilog语言设计一个程序,其功能是使LED数码管循环动态显示0~F 程序设计: module led0 (clk_50M,led_bit,dataout); input clk_50M; output [7:0] dataout; output led_bit; reg [7:0] dataout; reg led_bit; reg [27:0] count; always led_bit <= 'b0; always @ ( posedge clk_50M ) begin count<=count+1; end always @ ( posedge clk_50M ) begin case ( count[27:24] ) 0: dataout<=8'b11000000; 1: dataout<=8'b11111001; 2: dataout<=8'b10100100; 3: dataout<=8'b10110000; 4: dataout<=8'b10011001; 5: dataout<=8'b10010010; 6: dataout<=8'b10000010; 7: dataout<=8'b11111000; 8: dataout<=8'b10000000; 9: dataout<=8'b10010000; 10:dataout<=8'b10001000; 11:dataout<=8'b10000011; 12:dataout<=8'b11000110; 13:dataout<=8'b10100001; 1

FPGA课程设计

河南机电高等专科学校 《可编辑逻程器件原理与应用课程设计》 题目:数字跑表 班级: 学号: 姓名: 2012年6月8日

数字跑表设计 一、设计题目 设计一个以0.01s为基准计时信号的实用数字式跑表 二、设计要求 1)跑表计时显示范围0.01s—59min59.99s,计时精度为10ms。 2)具有清零、启动计时、暂停计时功能,操作按键(开关)不超过2个。 3)时钟源误差不超过0.01s。 三、总体设计思路 数字秒表设计采用模块化思想,自顶向下设计。总体上含有分频模块、计时控制器模块、计数模块、LED显示模块四个基本模块。各模块功能如下:(1)分频模块 分频器通过对256Hz时钟分频产生100Hz时钟,它同COUNT10中的十进制计数器要求的时钟频率一致。 (2)计时控制器模块 计时控制器模块的作用是将按键信号转变为计时器的控制信号。本设计中设置了2个按键,即启动/暂停键和清零键,由它们产生的计数允许保持和清零信号。 (3)计时模块 计时器通过对10ms脉冲的计数,达到计时的目的。由于数字跑表的计时范围为0到59分59.99秒,所以计时模块COUNT共需四个十进制计数器和两个六进制计时器。 (4)LED显示模块 用于数字跑表的最后显示 四、设计步骤如下: (1)分频模块 由于试验箱没有100Hz的时钟源,所以应设计分频模块分频。将输出256Hz 的时钟频率经过分频得到100Hz的时钟源,作为百分之一秒位的时钟输入, 每产生一个时钟上升沿,计数器加1即为10ms。新建Text Editor,以VHDL语言设计分频模块,程序源码如下: library ieee; use ieee.std_logic_1164.all; entity DIV is Port (clr:in std_logic; clk:in std_logic; clkout:out std_logic); end DIV; architecture a of DIV is begin process (clk,clr)

fpga课程设计报告

第一部分 EDA技术的仿真 1、奇偶校验位产生器 1.1奇偶校验位的技术要求 奇偶校验是通信中常用的一种数据校验方式,试设计一个奇偶校验位产生器,根据输入字节(8位)产生相应的奇偶校验位(1的个数为奇数时输出低电平,即奇校验位为1)和偶校验位(1的个数为偶数时输出高电平,即偶校验位为1) 1.2奇偶校验位的原理 通过计算数据中“1”的个数是奇数还是偶数来判断数据的正确性。在被校验的数据后加一位校验位或校验字符用作校验码实现校验。 其生成方法是: 奇校验:确保整个被传输的数据中“1”的个数是奇数个,即载荷数据中“1”的个数是奇数个时校验位填“0”,否则填“1”; 偶校验:确保整个被传输的数据中“1”的个数是偶数个,即载荷数据中“1”的个数是奇数个时校验位填“1”,否则填“0”。 1.3奇偶校验位的功能及其仿真波形 奇偶校验位的功能具体见下表所示: 输入8位的二进制序列奇校验位 even 偶校验位 odd 1 1 0 1 0 0 1 1 1 0 1 0 0 0 1 1 1 0 0 1 其具体实现程序如下所示: module parity(data,odd,even); input [0:7]data; output odd,even; assign odd=^data; assign even=~odd; endmodule 根据程序我们得到如下的仿真波形: 图1 奇偶校验位仿真波形 中国计量学院信息工程学院课程设计报告P.2

2、十六位数据选择器 2.1数据选择器的原理 在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,数据选择器(MUX)的逻辑功能是在地址选择信号的控制下,从多路数据中选择一路数据作为输出信号。 在数据选择器中,我们设定一个控制输入端ENA ,当ENA=1时,电路不能工作,输出Y=0;而当ENA=0时,电路才处于工作状态。由于我们设计的是16选1数据选择器,因而其有4个数据控制端,即S0,S1,S2,S3,根据这4个控制端的状态有选择性的输出。 2.2数据选择器的实现电路图 我们知道一个16选1的数据选择器是由5个4选1的数据选择器组成的,4选1的基本电路如下图所示: W[0..3]S[1..0] ENA f mux_4 inst2 在左图中,ENA 为使能控制输入端,低 电平有效,S 为两位的数据控制端,W 为输入端,f 为输出端。有上述4选1的原理图我们可以得到16选1的原理图: W[0..3]S[1..0]ENA f mux_4 inst W[0..3]S[1..0]ENA f mux_4 inst1 W[0..3]S[1..0]ENA f mux_4 inst2 W[0..3]S[1..0]ENA f mux_4 inst3 W[0..3]S[1..0]ENA f mux_4 inst4S3\32控制端 S1\S0控制端 图2 16选1数据选择器原理图 2.3数据选择器的功能仿真

FPGA课程设计报告

F P G A课程设计报告 (实现多功能数字钟) 专业班级: 07通信2班 姓名:朱绍兴 学号:0701******** 时间:2009.12.30

一、标题:设计多功能数字钟控制电路 二、任务书:用MAX+PLU SⅡ软件及Verilog HDL语言设计 一个多功能的数字钟,包括有时、分、秒的计 时,以及校时(对小时、分钟和秒能手动调整 以校准时间)、正点报时(每逢整点,产生“嘀 嘀嘀嘀-嘟”,4短一长的报时音)等附加功能。 三、关键词:24进制、60进制、正点报时、校时、数字钟 四、总体方案:多功能数字钟控制电路框图是由三部分组成 的,即秒分时控制电路、整点报时控制电路、 时段控制电路。用Verilog HDL硬件描述语 言完成编译和仿真。 五、原理框图如下: ↓ ↓ ↓

六、Verilog HDL硬件描述语言编写的功能模块: /*秒计数器m60*/ module m60(M,CP60M,CPM,RD); output [7:0]M; output CP60M; input CPM; input RD; reg [7:0]M; wire CP60M; always@(negedge RD or posedge CPM) begin if(!RD) begin M[7:0]<=0; end else begin if((M[7:4]==5)&&(M[3:0]==9)) begin M[7:0]<=0; end else begin if(M[3:0]==9) begin M[3:0]<=0; if(M[7:4]==5) begin M[7:4]<=0;end else M[7:4]<=M[7:4]+1; end

FPGA课程设计报告

FPGA课程设计报告 题目:基于CPLD的 1602字符液晶显示系统设计院系:信息与电气工程学院 班级:电子信息工程 学号: 学生姓名: 指导教师: 成绩: 2011 年7 月

基于CPLD的1602字符液晶显示系统设 计 一. 设计题目: 基于CPLD的1602 字符液晶显示系统设计 二.设计要求技术指标: 要求用1602 液晶显示字符; 显示内容:学号+英文姓名; 显示方式:流动显示,开关控制字符 流动速度及方向;具有暂停和清 屏的功能; 三.设计平台: QUARTUSII软件MARS-1270 CPLD 1602 液晶 四.设计思路与设计步骤: 液晶指令介绍: 要想控制1602 液晶显示字符,首先需要弄清 楚1602 有那些可控管脚, 有哪些控制命令,如何控制其显示,如何控制其移动及如何控制其移动速度及方 (1)接口说明:

(2)基本操作时序: A. 读状态:输入:RS=L,RW=H,E=H,输出:D B0--DB7=状态字 B.写指令:输入:RS=L,RW=L,E=下降沿脉冲, DBO--DB7=指令码, 输出:无 C.读数据:输入:RS=H,RW=H,E=H输出:, D B0--DB7=数据 D.写数据:输入:RS=H,RW=L,E=下降沿脉冲, DBO--DB7=数据, 输出:无 (3)指令集及其设置说明: A. 清屏指令: 功能:<1> 清除液晶显示器即将DDRAM的内容全部填入"空白"的ASCII码20H; <2> 光标归位,即将光标撤回液晶显示屏的左上方; <3> 将地址计数器(AC)的值设为0。 B.进入设置模式指令: 功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个 字符是否移动。参数设定的情况如下所示: 位名设置 I/D 0= 写入新数据后光标左移1= 写入新数据后光标右移

Verilog fpgA程序课程设计

课题一 一,设计一个可控的100进制可逆计数器,要求用实验箱下载。 (1)计数器的时钟输入信号周期为200ns。 (2)以十进制形式显示。 (3)有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用下,计数器具有复位、增或减计数、暂停功能。 二,设计思路: 由题目可知,可逆计数器有四种工作模式,即清零,加计数,减计数和暂停。由此,我想到有case语句,这也是整个程序的核心。 三,源代码 module updown_count(qout,reset,clk,plus,minus); output[7:0] qout;/*定义一个8位的输出,其目的是 低四位和高四位分别表示计数器的个位和十位。*/ input clk,plus,minus,reset;//定义四个输入,时钟,加计数,减计数和清零 reg[7:0] qout;//qout的数据类型为寄存器型 always @(posedge clk)//当clk上升沿到来时执行一遍下列程序 begin if(!reset) qout<=0;//当reset为低电平时,计数器执行清零功能,否则跳过 else begin case({minus,plus})//case语句模块,包含加,减和暂停四个模块 2'b10:

if (qout[3:0]==0)//判断个位是否为零,若不为零,跳到个位减一 begin qout[3:0]<=9;//给个位赋值 if(qout[7:4]==0) qout[7:4]<=9;//判断十位是否为零,并且给十位赋值 else qout[7:4]<=qout[7:4]-1;//由于个位赋9,相当于向十位借一,因而十位减一end else qout[3:0]<=qout[3:0]-1;//个位减一 /*这一部分是减计数模块,其思路是:首先判断个位是否为零,若为零,则执行后面的程序,个位直接赋9,并且十位减一;否则个位减一*/ 2'b01: if (qout[3:0]==9)//判断个位是否为9,否则跳到个位加一 begin qout[3:0]<=0;//若上面个位为9判断成立,则给个位赋值 if(qout[7:4]==9) qout[7:4]<=0;//判断十位是否为9,若为9,则赋0 else qout[7:4]<=qout[7:4]+1;//若十位不为9,十位加一 end else qout[3:0]<=qout[3:0]+1;//个位加一 /*这一部分是加计数模块,首先判断个位是否为9,若不为9,个位加1;否侧,再判断十位是否为9, 若为9,十位赋0,否侧十位加1。*/ 2'b11:

FPGA抢答器设计报告

Vb开办上海电力学院 课程设计报告 信息工程系 抢答器设计报告 一、设计目的: 本课程的授课对象是电子科学与技术专业本科生,是电子类专业的一门重要的实践课程,是理论与实践相结合的重要环节。 本课程有助于培养学生的数字电路设计方法、掌握模块划分、工程设计思想与电路调试能力,为以后从事各种电路设计、制作与调试工作打下坚实的基础 二、实验器材和工具软件: PC机一台、QuartusII软件、DE2板。 三、设计内容: (1)抢答器可容纳四组12位选手,每组设置三个抢答按钮供选手使

用。 (2)电路具有第一抢答信号的鉴别和锁存功能。在主持人将系统复位并发出抢答指令后,蜂鸣器提示抢答开始,时显示器显示初始时间并开始倒计时,若参赛选手按抢答按钮,则该组指示灯亮并用组别显示器显示选手的组别,同时蜂鸣器发出“嘀嘟”的双音频声。此时,电路具备自锁功能,使其它抢答按钮不起作用。 (3)如果无人抢答,计时器倒计时到零,蜂鸣器有抢答失败提示,主持人可以按复位键,开始新一轮的抢答。 (4)设置犯规功能。选手在主持人按开始键之前抢答,则认为犯规,犯规指示灯亮和显示出犯规组号,且蜂鸣器报警,主持人可以终止抢答执行相应惩罚。 (5)抢答器设置抢答时间选择功能。为适应多种抢答需要,系统设有10秒、15秒、20秒和3O秒四种抢答时间选择功能。 四、设计具体步骤: 首先把系统划分为组别判断电路模块groupslct,犯规判别与抢答信号判别电路模块fgqd,分频电路模块fpq1,倒计时控制电路模块djs,显示时间译码电路模块num_7seg模块,组别显示模块showgroup 模块这六个模块,各模块设计完成后,用电路原理图方法将各模块连接构成系统。 各模块功能及代码: 1、组别判别模块 (1)功能:可容纳四组12位选手,每组设置三个抢答按钮供选手使用。若参赛选手按抢答按钮,则输出选手的组别。此时,电路具

课程设计-基于fpga的vga图形显示大学论文

电子信息工程专业综合设计(报告) (课程设计) 题目基于FPGA的VGA图形显示 二级学院电气与电子工程学院 专业电子信息工程 班级 学生姓名学号 同组姓名 指导教师 时间

基于FPGA的VGA图形显示 摘要: 本次的题目是基于FPGA的VGA图形显示,实现VGA图像显示与控制。本文介绍的主要内容围绕着显示特定图片,且图片可受控制的相关原理与方法展开。根据VGA显示原理,利用VHDL作为逻辑描述手段,设计了一种基于现场可编程器件FPGA的VGA接口控制器。实现VGA图像显示控制器是通过Altera公司的QuartusII软件环境下对VGA模块的设计和顶层逻辑框图设计。FPGA的嵌入式系统中能代替VGA的专用显示芯片,节约硬件成本,节省计算机处理时间,加快数据处理速度并具有显示面积大,色彩丰富、承载信息量大、接口简单等优点。除此以外FPGA芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,可不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要。 关键字:FPGA VGA 图像控制器 一、前言 本次课程设计主要是通过Altera公司的QuartusII软件环境下对VGA模块的设计和顶层逻辑框图设计。VGA是IBM于1987年提出的一个使用模拟信号的电脑显示标准。在性能上,VGA将16色模式的分辨率提高到了640×480,同时VGA新提供了一种具有320×200分辨率、256种颜色的图形模式,且所显示的每一种颜色都可从262144(18位)种颜色中选择,VGA的这种色彩显示能力对微机图形/图象软件的发展起到了很大的促进作用先后分别经历了EGA, EGA, VGA, SVGA, XGA, SXGA, UXGA, QXGA, WQXGA, QSXGA, WQSXGA, QUXGA, WQUXGA, 1080P。 目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R,G,B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。对于模拟显示设备,如模拟CRT显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。而对于LCD、DLP等数字显示设备,显示设备中需配置相应的

FPGA课程设计报告

Shenyang Agricuttural University FPGA课程设计报告 题目:基于CPLD的1602字符液晶显示系统设计院系: _________ 信息与电气工程学院___________ 班级: __________________ 电子信息工程_________ 学号:____________________________________________ 学生姓名:_________________________________________ 指导教师:_________________________________________ 成绩:____________________________________________ 2011年7月

基于CPLD勺1602字符液晶显示系统设计 一.设计题目: 基于CPLD勺1602字符液晶显示系统设计 二?设计要求技术指标: 要求用1602液晶显示字符; 显示内容:学号+英文姓名; 显示方式:流动显示,开关控制字符流动速度及方向;具有暂停和清屏的 功能; 三?设计平台: QUARTUSII 6.0软件MARS-1270 CPLD 1602 液晶 四?设计思路与设计步骤: 1.1602液晶指令介绍: 要想控制1602液晶显示字符,首先需要弄清楚1602有那些可控管脚,有哪些控制命令,如何控制其显示,如何控制其移动及如何控制其移动速度及方向等,下面首先介绍一下我所要用的指令及管脚等。 (1)接口说明: (2)基本操作时序: A. 读状态:输入:RS=L RW=H,E=H,输出:DB0--DB7= 犬态字

FPGA课程设计

西安欧亚学院 信息工程学院 FPGA系统开发设计报告 2013 / 2014 学年第二学期 设计题目:基于VHDL的分频计设计 专业班级:统本电信1201班 姓名学号:李瑞洋 12620102154071 指导教师:张秀芳 设计成绩:

一、设计任务及要求: 当系统正常工作时,由系统时钟提供的50MHz的输入信号,经过信号源模块,先通过100分频产生1MHZ的时钟信号,再将1MHZ的时钟信号分频产生多种频率输出,其中1HZ的输出频率被作为控制模块的时钟输入,7812HZ的输出频率被作为显示模块的时钟输入,由控制模块产生的计数使能信号testen和清零信号clr对计数模块进行控制,而由其产生的锁存信号load对锁存模块进行控制,一旦计数使能信号为高电平,并且时钟上升沿到来,计数器便开始正常计数,清零信号到来则计数清零,而当锁存信号为高电平时,数据便被锁存器锁存,然后将锁存的数据输出到显示模块显示出来,数据锁存保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在数码显示管上 可以显示的十进制结果。在数码显示管上可以看到计数结果。数字频率计的原理框图如图所示。主要由5个模块组成,分别是:信号源模块、控制模块、计数模块、锁存器模块和显示器模块[6] 二、基本设计思路 根据数字频率计的系统原理,cnt控制信号发生器。testctl的计数使能信号testen能产生一个1 s宽的周期信号,并对频率计的每一计数器Cnt10的ENA 使能端进行同步控制:当testen高电平时允许计数、低电平时停止计数。 reg32b为锁存器。在信号load的上升沿时,立即对模块的输入口的数据锁存到reg32b的内部,并由reg32b的输出端输出,然后,七段译码器可以译码输出。在这里使用了锁存器,好处是可以稳定显示数据,不会由于周期性的清零信号而不断闪烁。

FPGA课程设计报告

课程设计 开课学期: 2014年—2015年下学期 课程名称:FPGA课程设计 学院:信息科学与工程学院 专业:集成电路设计与集成系统 班级:集成1201班 学号:20121221077 姓名:蔚 任课教师:涛 2015 年 7 月 21 日

基于FPGA的数字钟设计 摘要 本文介绍一种利用现场可编程逻辑器件FPGA产生多功能数字钟的设计方案。数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常生活中不可少的必需品。 本设计采用EDA技术,以硬件描述语言Verilog为系统逻辑描述手段设计文件,在Quartus II工具软件环境下,由各个基本模块共同构建了一个基于FPGA的数字钟。 系统由时钟模块、控制模块、计时模块、数据译码模块、显示以及报时模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证。开发板采用5CSEMA5F31C6N。本次设计的多功能数字钟,具有时、分、秒的数码管显示功能,以24小时循环计数,具有整点报时功能,并有由按键输入进行数字钟的校时、清零、启停功能。 关键词:可编程逻辑器件 FPGA Verilog 数字钟 EDA技术

Abstract This paper introduces a kind of based on field programmable logic device FPGA design of multi-function digital clock, the digital clock is used in digital circuits, and seconds digital display timing device is in people's daily life necessities. This design using EDA technology, hardware description language Verilog logic system description method of design documents, in the Quartus II software environment, by all the basic modules together to build a a FPGA based digital clock. System consists of the clock module, control module, time module, data decoding module, display and broadcast module composition. Program after compilation and simulation design, programmable logic device to download verification. Development board using the multi-function digital clock 5CSEMA5F31C6N. this design, with time, points, the second digital tube display, to a 24-hour cycle count, with the whole point timekeeping function and input by the key of the school of digital clock, clear, open and stop function. Key words: programmable logic device FPGA Verilog Digital cloc EDA Technology

相关文档
最新文档