文档库 最新最全的文档下载
当前位置:文档库 › 基于FPGA的数字CMOS摄像机图像采集

基于FPGA的数字CMOS摄像机图像采集

基于FPGA的数字CMOS摄像机图像采集
基于FPGA的数字CMOS摄像机图像采集

基于FPGA的数字CMOS摄像机图像采集

一、数据采集系统概述

数据采集是指将以各种形式输入的被测信号,包括语音信号、温度信号、湿度信号、图像信号等经过适当处理,成为计算机可以识别的数字信号,从而送入计算机进行存储处理的过程,数据采集卡就是典型的基于数据采集系统原理的集成计算机扩展卡。如图1所示,在数据采集过程中主要有几个关键部分:(1)输入信号的幅度较小或者过大,需要经过放大器单元将输入信号幅度放大或者缩小;(2)输入信号带有较大的噪声,需要经过一个硬件的模拟滤波单元,将信号滤波整形;(3)将信号送到AD进行模数转换;(4)将信号传输到计算机;(5)存储记录和处理数据。

图1数据采集过程

通常认为如果数字逻辑电路的频率超过50MHz,而且工作在这个频率之上的电路已经

占到了整个电路系统的三分之一以上,就称为高速电路。相应的,对于并行采样系统,如果采样频率达到50MHZ,数据量并行8bit以上;对于串行采样系统,如果采样频率达到200MHz,一般将这种采样系统也称为高速数据采集。目前高速数据采集使用较多的采样频率一般在

50M~100MHz之间。采集系统分模拟系统和数字系统,大多数字采集系统中,CMOS图像

传感器是系统的成像部件,它是系统的“眼睛”,能够捕获高速运动物体的图像,此模块是将采集的模拟图像转化为数字信号输出;图像处理模块是系统的中间缓存处理部分,此模块为了消除或降低前期采集携带噪声的影响,提高图像质量,将庞大的数据量进行压缩,以减小对存储介质容量的要求;数据传输模块是系统与外设搭建的桥梁,此模块是将实时采集的数据高速传输,给外设提供信息。

二、总体方案设计

方案1:

图像数据的传输通过USB总线技术完成系统的初始化以及将最终的传输信号准确无误

地传送到上位机上。USB技术具有简单化、通用性、可靠性、热插拔、传输速率高等优点,随之带来的是应用USB技术的复杂程度高、总线传输协议需要协调等问题。

方案2:

利用两片SDRAM进行图像数据的短时间存储并快速传输,SDRAM是多Bank结构,

例如在一个具有两个Bank的SDRAM的模组中,其中一个Bank在进行预充电期间,另一个Bank却马上可以被读取,这样当进行一次读取后,又马上去读取已经预充电Bank的数据时,就无需等待而是可以直接读取了,这也就大大提高了存储器的访问速度。其优点是设计相对简单、不许考虑传输时转换总线的问题、较为可靠,缺点是SDRAM容量有限、传输时序需要计算准确、SDRAM经常刷新等。

根据综合分析和考虑,我们选用相对简单方便的方案2,选择器件如下:FPGA采用Altera 的Cyclone EP2C35F484C8,视频采集芯片用飞利浦的SAA7113作为A/D转换单元,两块型号为K4S641632E的SDRAM和FPGA构成图像帧存储及传输处理系统,ADV7125是数模转换芯片,和计算机VGA显示器相连作为显示终端,系统整体框图如图2所示。

图2视频监控系统整体框图

以上图像视频监视系统的大部分设计工作都集中在对FPGA的编程开发上,通过分析可以确定出FPGA需要包含如下几个功能模块。

(1)视频接口配置模块:视频采集芯片SAA7113具有多种采集方式,这里FPGA通过I2C 总线对其内部寄存器进行配置,使其按照一定的格式进行采样。

(2)异步FIFO模块:当FPGA接收A/D采样的视频数据时,由于SAA7113和FPGA一般在不同的时钟频率下,这就会出现通常所说的异步时钟问题,处理不当就容易出现亚稳态,常用方法是在两者之间添加一块异步FIFO。

(3)视频变换模块:对得到的数字视频流进行解码,识别出行、场同步信号,并且根据需要选择采集图像的大小,进而变换成RGB格式的图像数据,以便于后续显示。

(4)图像帧存读写模块:将解码后的数据经由一个乒乓机制依次存放在两片RAM中,每个里面刚好存放一幅图像,通过乒乓机制使得两块存储区域交替进行存储输入和显示输出,避免等待,提高速度。

(5)VGA控制模块:根据VGA的工业参数,产生相应的行同步和场同步信号,并在适当时刻送入数据,经由ADV7125送VGA进行显示。

图3描述了FPGA内部的各个主要功能模块。系统上电时,FPGA首先从外部Flash中读取配置数据,完成自身的程序加载,进入工作模式状态。随后I2C配置接口模块完成对

SAA7113的初始化,初始化结束后,FPGA等待采集图像的命令。FPGA收到采集命令后,启动采集视频数据模块、异步FIFO模块和视频解码模块进行解码,将数据轮换写到两个帧存中,经通信模块送出,以上即为该系统的工作流程。下面主要针对SDRAM控制模块的具体实现过程进行详细分析和介绍。

图3 FPGA系统内部各模块整体框图

三、SDRAM控制模块

系统要把每一幅图像数据存储到一个SDRAM里面供后续显示,由于SDRAM整个数据的写入和读出都需要一定的时间,为了避免中间等待过程,采用两片等大的SDRAM交替工作,一片在从FIFO向其写入时另一片向VGA输出,使用乒乓机制交换它们的工作性质。这样问题的重点就集中在FPGA对SDRAM的读写控制模块上。

3.1SDRAM概述

之所以要用到SDRAM,是因为它价格低、体积小、速度快、容量大,是比较理想的存储器件。在基于FPGA的图像采集和集中显示系统中,常常要用到这种大容量、高速度的存储器。但SDRAM的控制逻辑比较复杂,对时序要求也十分严格,这就要求有一个专门的控制器,使系统用户能很方便地操作SDRAM。

SDRAM器件的管脚分为控制信号、地址和数据3类。通常一个SDRAM中包含几个BANK,每个BANK的存储单元是按行和列寻址的。由于这种特殊的存储结构,SDRAM有以下几个工作特性。

(1)SDRAM的初始化

SDRAM在上电100~200μs后,必须由一个初始化进程来配置SDRAM的模式存储器,模式存储器的值决定SDRAM的工作模式。

访问存储单位:为减少I/O引脚数量,SDRAM复用地址线,所有在读写SDRAM时,先由ACTIVE命令激活要读写的BANK,并锁存行地址,然后在读写指令有效时锁存列地址。一旦BANK被激活后,只有执行一次预充命令后才能再次激活同一BANK。

(2)刷新和预充

SDRAM的存储单元可以理解为一个电容,总是倾向于放电,因此必须有定时刷新周期以避免数据全失。刷新周期可由(最小刷新周期+时候周期)计算获得。对BANK预充电或者关闭已激活的BANK,可预充特定BANK也可同时作用于所有BANK,A10、BA0和BA1用于选择BANK。

(3)操作控制

SDRAM的具体控制命令由一些专用控制引脚和地址线辅助完成。CS、RAS、CAS和WR在时钟上升沿的状态决定具体操作动作,地址线和BANK选择控制线在部分操作动作中作为辅助参数输入。由于特殊的存储结构,SDRAM操作指令比较多,不像SRAM一样只有简单的读写。根据系统要求,本设计选用SAMSUNG的K4S6432 SDRAM芯片。

3.2SDRAM控制器总体设计

SDRAM控制器与外部的接口示意图由图4给出,控制器右端接口信号均为直接与SDRAM对应管脚相连的信号;控制器左端的接口信号为与FPGA相连的系统控制接口信号,其中,CLK为系统时钟信号,RESET_N为复位信号,ADDR为系统给出的SDRAM地址信号,DAIN是系统用于写入SDRAM的数据信号,FPGA_RD和FPGA_WR为系统读、写请求信号(1为有效,0为无效),SDRAM_FREE是SDRAM的空闲状态标示信号(0为空闲,1为忙碌),FDATA_ENABLE是控制器给系统的数据收发指示信号(为0时,无法对SDRAM 进行数据收发;为1时,若是系统读操作,则系统此时可从DAOUT接收SDRAM的数据,若是写操作,则系统此时可以通过DAIN发送数据给SDRAM)。

图4总体设计框图和外部接口信号

参照SDRAM的数据手册可知,它的指令译码对照表如表1所示。

表1 SDRAM指令译码对照表

仔细分析SDRAM的各个接口信号、时序要求和工作模式,将该SDRAM控制器的内部进一步细化为多个功能模块,结构组成如图5所示,包括系统控制接口模块、CMD命令解析模块、命令相应模块、数据通路模块。系统控制接口模块用于接收系统的控制信号,进而产生不同的CMD命令组合;CMD命令解析模块用于接收CMD命令并解码成操作指令;命令响应模块用于接收操作指令并产生SDRAM的操作动作;数据通路模块则用于控制数据的有效输入输出。

图5 SDRAM控制器的结构图

3.3SDRAM系统控制接口子模块设计

该模块主要包括初始化和系统指令分析功能。其工作过程如下:由计数器控制在系统上电约200μs后,先进行SDRAM的初始化配置工作,由一个Precharge all back指令完成对所有BANK的预充,接着是多个Refresh指令,然后是模式配置指令LOADMODE,完成SDRAM 的工作模式设置。之后进行控制器的初始化配置工作,先发出指令LOADREG1给控制器载入模式字,再发出LOADREG2指令载入控制器的刷新计数器值,完成控制器初始化配置。

上述初始化过程结束后,系统指令分析机制才可接收并分析系统的读写信号和地址信息,以及从下个模块反馈回来的CMD_ACK信号,并产生对应的CMD命令和SADDR地址信

息给CMD命令解析模块。通过程序设置,实现了根据初始化配置的参数来确定在读写到特定时刻发出Precharge或者Refresh的CMD指令,从而简化了系统的控制。而每当收到CMD_ACK为1时,表示CMD指令已经发出并有效,此时就要发出NOP命令(CMD=000)。要说明的是,SADDR是分时复用的,在初始化载入模式时,SADDR用以传输用户自己定

义的模式字内容;而在正常的读写期间,SADDR作为地址线传输SDRAM所需的行、列和块地址。代码示例如附件1.

3.4CMD命令解析和命令相应子模块

该模块首先对CMD指令进行判断,其结果解释输出相应的操作指令进行响应。例如,CMD为001时,则会输出do_read信号为1;CMD为010时,则会输出do_write信号为1,在同一时刻,只会输出一种有效的操作指令。然后该模块根据操作指令,做出符合SDRAM 读写规范的操作动作,来进行用户期望的操作;给出数据选通信号OE,来控制数据通路模块(写操作OE为1,读操作时OE为0)。此外,该模块把系统非复用的地址ADDR处理为SDRAM复用的地址,分时送给SA、BA。程序中地址复用的方法为:

assign raddr=ADDR[ROWSTART+ROWSIZE-1:ROWSTART];//raddr为行地址

assign eaddr=ADDR[COLSTART+COLSIZE-1:COLSTART];//eaddr为列地址

assign baddr=ADDR[BANKSTART+BANKSIZE-1:BANKSTART];//baddr为BANK地址在程序中,WRITEA和READA的CMD指令实际隐含了ACTIVE命令,所以该模块在收到do_write或do_read指令后,会先进行激活动作,经过初始化配置规定的CAS延迟时间之后再进行读写动作。

此外,该模块内含用以预设某些模式参数的模式寄存器,主要包括3类:第1类是SDRAM模式控制寄存器,在LOADMODE指令时,将该寄存器的值送入SDRAM的模式寄存器中,以控制SDRAM的工作模式;第2类是SDRAM控制器的参数寄存器

(LOAD_REG1),使得SDRAM控制器的工作方式与外部的SDRAM器件的工作方式匹配;第3类是SDRAM的刷新周期控制寄存器,该寄存器预设用户定义的自动刷新计数值,用于SDRAM的刷新周期预设。上述3类寄存器的预设值都是系统控制接口模块在初始化时通过SADDR传送给来的。收到各类操作指令后,该模块会反馈给CMD命令解析模块cmdack 信号为1,并最终反馈到系统控制接口模块的CMDACK信号为1,如果没有收到任何操作指令,则cmdack=0,CMDACK信号为0。代码示例如附件2.

3.5数据通路子模块

该模块受OE信号的控制,使数据的进出和相应的操作指令在时序上同步。OE为1时,数据可由DQ脚写入SDRAM,OE为0时,数据可从SDRAM的DQ脚读出。因为是内部模块,所以应该尽量避免使用双向端口,因此在这里DQ的输入输出作用分别用端口DQIN 和DQOUT代替,在顶层模块调用时再使用OE信号实现三态双向传输。代码示例如附件3.

3.6SDRAM控制器顶层模块

实际上在大型工程开发过程中很少用到图形编辑工具,因为连接线较多不易连接,容易显得杂乱,可读性和可移植性都不强。因此大多数模块调用都是通过代码形式来调用的,读者要熟悉并习惯使用在程序中调用另一个子模块的方式。附件4是SDRAM控制器顶层模块代码示例,通过这种调用方式将其他子模块融合在一个统一的大工程下。

附件1:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

entity control_interface is

generic(ASIZE:integer:=32);

port(

CLK :in std_logic;

RESET_N :in std_logic;

CMD :in std_logic_vector(2 downto 0);

ADDR :in std_logic_vector(ASIZE-1 downto 0);

REF_ACK :in std_logic;

CM_ACK :in std_logic;

NOP :out std_logic;

READA :out std_logic;

WRITEA :out std_logic;

REFRESH :out std_logic;

LOAD_MODE :out std_logic;

SADDR :out std_logic_vector(ASIZE-1 downto 0);

SC_CL :out std_logic_vector(1 downto 0);

SC_RC :out std_logic_vector(1 downto 0);

SC_RRD :out std_logic_vector(3 downto 0);

SC_PM :out std_logic;

SC_BL :out std_logic_vector(3 downto 0);

REF_REQ :out std_logic;

CMD_ACK :out std_logic;

);

end control_interface;

architecture RTL of control_interface is

--signal declarations

signal LOAD_REG1 : std_logic;

signal LOAD_REG2 : std_logic;

signal REF_PER : std_logic_vector(15 downto 0); signal timer : signed(15 downto 0);

signal timer_zero : std_logic;

signal SAADR_int : std_logic_vector(ASIZE-1 downto 0); signal CMD_ACK_int : std_logic;

signal SC_BL_int : std_logic_vector(3 downto 0);

begin

--This module decodes the commands from the CMD input to individual

--command lines,NOP,READA,WRITEA,REFRESH,PRECHARGE,LOAD_MODE; --ADDR is register in order to keep it aligned with decoded command.

process(CLK,RESET_N)

begin

if(RESET_N='0')then

NOP <='0';

READA <='0';

WRITEA <='0';

REFRESH <='0';

PRECHARGE <='0';

LOAD_MODE <='0';

load_reg1 <='0';

load_reg2 <='0';

SAADR_int <=(others=>'0');

elseif rising_edge(CLK)then

SAADR_int<=ADDR;

if(CMD='000')then

NOP<='1';

else

NOP<='0';

end if;

if(CMD='001')then

READA<='1';

else

READA<='0';

end if;

if(CMD='010')then

WRITEA<='1';

else

WRITEA<='0';

end if;

if(CMD='011')then

REFRESH<='1';

else

REFRESH<='0';

end if;

if(CMD='100')then

PRECHARGE<='1';

else

PRECHARGE<='0';

end if;

if(CMD='101')then

LOAD_MODE<='1';

else

LOAD_MODE<='0';

end if;

if((CMD='110')and(LOAD_REG1='0'))then

LOAD_REG1<='1';

else

LOAD_REG1<='0';

end if;

if((CMD='111')and(LOAD_REG2='0'))then

LOAD_REG2<='1';

else

LOAD_REG2<='0';

end if;

end if;

end process;

.......

End RTL;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

entity command is

generic(

ASIZE :integer:=23;

DSIZE :integer:=32;

ROWSIZE :integer:=12;

COLSIZE :integer:=9;

BANKSIZE :integer:=2;

ROWSTART :integer:=9;

COLSTART :integer:=0;

BANKSTART :integer:=20;

);

port(

CLK :in std_logic;

RESET_N :in std_logic;

SADDR :in std_logic_vector(ASIZE-1 downto 0);

NOP :in std_logic;

READA :in std_logic;

WRITEA :in std_logic;

REFRESH :in std_logic;

PRECHARGE :in std_logic;

LOAD_MODE :in std_logic;

SC_CL :in std_logic_vector(1 downto 0);

SC_RC :in std_logic_vector(1 downto 0);

SC_RRD :in std_logic_vector(3 downto 0);

SC_PM :in std_logic;

SC_BL :in std_logic_vector(3 downto 0);

REF_REQ :in std_logic;

REF_ACK :out std_logic;

CM_ACK :out std_logic;

OE :out std_logic;

SA :out std_logic_vector(11 downto 0);

BA :out std_logic_vector(1 downto 0);

CS_N :out std_logic_vector(1 downto 0);

CKE :out std_logic;

RAS_N :out std_logic;

CAS_N :out std_logic;

WE_N :out std_logic;

);

architecture RTL of command is

--signal declarations

signal do_nop : std_logic;

signal do_reada : std_logic;

signal do_writea : std_logic;

signal do_writea1 : std_logic;

signal do_refresh : std_logic;

signal do_precharge : std_logic;

signal do_load_mode : std_logic;

signal command_done : std_logic;

signal command_delay: std_logic_vector(7 downto 0);

signal rw_shift : std_logic_vector(3 downto 0);

signal do_act : std_logic;

signal rw_flag : std_logic;

signal do_rw : std_logic;

signal oe_shift : std_logic_vector(7 downto 0);

signal oe1 : std_logic;

signal oe2 : std_logic;

signal oe3 : std_logic;

signal oe4 : std_logic;

signal rp_shift : std_logic_vector(3 downto 0);

signal rp_done : std_logic;

signal rowaddr : std_logic_vector(ROWSIZE-1 downto 0);

signal coladdr : std_logic_vector(COLSIZE-1 downto 0);

signal bankaddr : std_logic_vector(BANKSIZE-1 downto 0); signal REF_REQ_int : std_logic;

begin

rowaddr <=SADDR(ROWSTART+ROWSIZE-1 downto ROWSTART); coladdr <=SADDR(COLSTART+COLSIZE-1 downto COLSTART); bankaddr <=SADDR(BANKSTART+BANKSIZE-1 downto BANKSTART); --This process monitors the individual command lines and issues a command --to the next stage if there currently another command already running.

--

process(CLK,RESET_N)

begin

if(RESET_N='0')then

do_nop <='0';

do_writea <='0';

do_refresh <='0';

do_precharge <='0';

do_load_mode <='0';

command_done <='0';

command_delay <=(others=>'0');

rw_flag <='0';

rp_shift <=(others=>'0');

rp_done <='0';

do_writea1 <='0';

elseif rising_edge(CLK)then

if((REF_REQ ='1' or REFRESH ='1')and command_done ='0' and do_refresh ='0' and rp_done ='0' and do_reada ='0'and do_writea ='0')then

do_refresh <='1';

else

do_refresh <='0';

end if;

if((READA ='1') and (command_done ='0')and (do_writea ='0') and (rp_done ='0') and (REF_REQ ='0'))then

do_reada <='1';

else

do_reada <='0';

end if;

if((WRITEA ='1') and (command_done ='0')and (do_writea ='0') and (rp_done ='0') and (REF_REQ ='0'))then

do_writea <='1';

do_writea1 <='1';

else

do_writea <='0';

do_writea1 <='0';

end if;

if((PRECHARGE ='1') and (command_done ='0') and (do_writea ='0') and (do_precharge ='0'))then do_precharge <='1';

else

do_precharge <='0';

end if;

if((LODE_MODE ='1') and (command_done ='0') and (do_lode_mode ='0'))then

else

do_lode_mode <='0';

end if;

if((do_refresh ='1') or (do_reada ='1') or (do_writea ='1') or (do_precharge ='1') or (do_lode_mode ='1'))then

command_delay <= '11111111';

command_done <= '1';

rw_flag <= do_reada;

else

command_done <= command_delay(0);

command_delay(6 downto 0) <= command_delay(7 downto 1);

command_delay(7) <= '0';

end if;

if(command_delay(0) = '0'and command_done = '1')then

rp_shift <= '1111';

rp_done <= '1';

else

rp_done <= rp_shift(0);

rp_shift(2 downto 0) <= rp_shift(3 downto 1);

rp_shift(3) <= '0';

end if;

end if;

end process;

process(CLK,RESET_N)

begin

if(RESET_N = '0')then

oe_shift <= (others => '0');

oe1 <= '0';

oe2 <= '0';

oe3 <= '0';

oe4 <= '0';

OE <= '0';

elsif rising_edge(CLK)then

if(SC_PM = '0')then

if(do_writea1 = '1')then

if(SC_BL = '0001')then

oe_shift <= (others => '0');

elsif(SC_BL = '0010')then

oe_shift <= '00000001';

elsif(SC_BL = '0100')then

oe_shift <= '00000111';

elsif(SC_BL = '1000')then

oe_shift <= '01111111';

end if;

oe1 <= '1';

else

oe_shift(6 downto 0) <= oe_shift(7 downto 1);

oe_shift(7) <= '0';

oe1 <= oe_shift(0);

oe2 <= oe1;

oe3 <= oe2;

oe4 <= oe3;

if(SC_RC = "10")then

OE<=oe3;

else

OE<=OE4;

end if;

end if;

else

if(do_writea1 = '1')then

oe4 <= '1';

elsif(do_precharge = '1' or do_reada = '1' or do_refresh = '1')then

oe4 <= '0';

end if;

OE <= oe4;

end if;

end if;

end process;

library ieee;

use ieee.std_logic_1164.all;

entity sdr_data_path is

generic(DSIZE:integer:=32);

port(

CLK :in std_logic;

RESET_N :in std_logic;

OE :in std_logic;

DA TAIN :in std_logic_vector(DSIZE-1 downto 0);

DM :in std_logic_vector(DSIZE/8-1 downto 0);

DA TAOUT :out std_logic_vector(DSIZE-1 downto 0);

DQIN :in std_logic_vector(DSIZE-1 downto 0);

DQOUT :out std_logic_vector(DSIZE-1 downto 0);

DQM :out std_logic_vector(DSIZE/8-1 downto 0);

);

end sdr_data_path;

architecture RTL of sdr_data_path is

--signal declarations

signal DIN1 : std_logic_vector(DSIZE-1 downto 0);

signal DIN2 : std_logic_vector(DSIZE-1 downto 0);

signal DM1 : std_logic_vector(DSIZE/8-1 downto 0); begin

process(CLK,RESET_N)

begin

if(RESET_N='0')then

DIN1 <=(others=>'0');

DIN2 <=(others=>'0');

DM1 <=(others=>'0');

elseif rising_edge(CLK)then

DIN1 <= DA TAIN;

DIN2 <= DIN1;

DM1 <= DM;

DQM <= DM1;

end if;

DATAOUT <= DQIN; DQOUT <= DIN2; end RTL;

library ieee;

use ieee.std_logic_1164.all;

entity sdr_sdram is

generic(

ASIZE :integer:=23;

DSIZE :integer:=32;

ROWSIZE :integer:=12;

COLSIZE :integer:=9;

BANKSIZE :integer:=2;

ROWSTART :integer:=9;

COLSTART :integer:=0;

BANKSTART :integer:=20;

);

port(

CLK :in std_logic;

RESET_N :in std_logic;

ADDR :in std_logic_vector(ASIZE-1 downto 0);

CMD :in std_logic_vector(2 downto 0);

CMDACK :out std_logic;

DA TAIN :in std_logic_vector(DSIZE-1 downto 0);

DA TAINOUT :out std_logic_vector(DSIZE-1 downto 0);

DM :in std_logic_vector(DSIZE/8-1 downto 0);

SA :out std_logic_vector(11 downto 0);

BA :out std_logic_vector(1 downto 0);

CS_N :out std_logic_vector(1 downto 0);

CKE :out std_logic;

RAS_N :out std_logic;

CAS_N :out std_logic;

WE_N :out std_logic;

DQ :inout std_logic_vector(DSIZE-1 downto 0);

DQM :out std_logic_vector(DSIZE/8-1 downto 0);

);

end sdr_sdram;

architecture RTL of sdr_sdram is

--component declarations

component command

generic(

ASIZE :integer:=23;

DSIZE :integer:=32;

ROWSIZE :integer:=12;

COLSIZE :integer:=9;

BANKSIZE :integer:=2;

ROWSTART :integer:=9;

COLSTART :integer:=0;

BANKSTART :integer:=20;

);

port(

CLK :in std_logic;

RESET_N :in std_logic;

SADDR :in std_logic_vector(ASIZE-1 downto 0);

NOP :in std_logic;

READA :in std_logic;

WRITEA :in std_logic;

REFRESH :in std_logic;

PRECHARGE :in std_logic;

LOAD_MODE :in std_logic;

SC_CL :in std_logic_vector(1 downto 0);

SC_RC :in std_logic_vector(1 downto 0);

SC_RRD :in std_logic_vector(3 downto 0);

SC_PM :in std_logic;

SC_BL :in std_logic_vector(3 downto 0);

REF_REQ :in std_logic;

REF_ACK :out std_logic;

CM_ACK :out std_logic;

OE :out std_logic;

SA :out std_logic_vector(11 downto 0);

BA :out std_logic_vector(1 downto 0);

CS_N :out std_logic_vector(1 downto 0);

CKE :out std_logic;

RAS_N :out std_logic;

CAS_N :out std_logic;

WE_N :out std_logic;

);

end command;

component sdr_data_path

generic( DSIZE:integer:=32 );

port(

CLK :in std_logic;

RESET_N :in std_logic;

OE :in std_logic;

DA TAIN :in std_logic_vector(DSIZE-1 downto 0);

DA TAINOUT :out std_logic_vector(DSIZE-1 downto 0);

DM :in std_logic_vector(DSIZE/8-1 downto 0);

DQIN :in std_logic_vector(DSIZE-1 downto 0);

DQOUT :out std_logic_vector(DSIZE-1 downto 0);

DQM :out std_logic_vector(DSIZE/8-1 downto 0);

);

end component;

component control_interface

generic( ASIZE:integer:=32 );

port(

CLK :in std_logic;

RESET_N :in std_logic;

CMD :in std_logic_vector(2 downto 0);

ADDR :in std_logic_vector(ASIZE-1 downto 0);

REF_ACK :in std_logic;

CM_ACK :in std_logic;

NOP :out std_logic;

READA :out std_logic;

WRITEA :out std_logic;

REFRESH :out std_logic;

PRECHARGE :out std_logic;

LOAD_MODE :out std_logic;

SADDR :out std_logic_vector(ASIZE-1 downto 0);

);

end component;

attribute syn_black_box:boolean;

component pll1

port(

inclock :in std_logic;

clock :out std_logic;

locked :out std_logic;

);

end component;

attribute syn_black_box of pll1:component is true;

--signal declarations

signal ISA : std_logic_vector(11 downto 0);

signal IBA : std_logic_vector(1 downto 0);

signal ICS_N : std_logic_vector(1 downto 0);

signal ICKE : std_logic;

signal IRAS_N : std_logic;

signal ICAS_N : std_logic;

基于FPGA的数字时钟的设计1

基于FPGA的数字时钟的设计课题: 基于FPGA的数字时钟的设计 学院: 电气信息工程学院 专业: 测量控制与仪器 班级 : 08测控(2)班 姓名 : 潘志东 学号 : 08314239 合作者姓名: 颜志林 2010 年12 月12 日

综述 近年来随着数字技术的迅速发展,各种中、大规模集成电路在数字系统、控制系统、信号处理等方面都得到了广泛的应用。这就迫切要求理工科大学生熟悉与掌握常用中、大规模集成电路功能及其在实际中的应用方法,除通过实验教学培养数字电路的基本实验方法、分析问题与故障检查方法以及双踪示波器等常用仪器使用方法等基本电路的基本实验技能外,还必须培养大学生工程设计与组织实验能力。 本次课程设计的目的在于培养学生对基本电路的应用与掌握,使学生在实验原理的指导下,初步具备基本电路的分析与设计能力,并掌握其应用方法;自行拟定实验步骤,检查与排除故障、分析与处理实验结果及撰写实验报告的能力。综合实验的设计目的就是培养学生初步掌握小型数字系统的设计能力,包括选择设计方案,进行电路设计、安装、调试等环节,运用所学知识进行工程设计、提高实验技能的实践。数字电子钟就是一种计时装置,它具有时、分、秒计时功能与显示时间功能;具有整点报时功能。 本次设计我查阅了大量的文献资料,学到了很多关于数字电路方面的知识,并且更加巩固与掌握了课堂上所学的课本知识,使自己对数字电子技术有了更进一步的认识与了解。

1、课题要求 1、1课程设计的性质与任务 本课程就是电子与信息类专业的专业的专业基础必修课——“数字电路”的配套实验课程。目的在于培养学生的理论联系实际,分析与解决问题的能力。通过本课程设计,使学生在理论设计、计算机仿真、指标调测、故障排除等方面得到进一步的训练,加强学生的实践能力。学生通过设计、仿真、调试、撰写设计报告等过程,培养学生的动手能力与严谨的工作作风。 1、2课程设计的基本技术要求 1)根据课题要求,复习巩固数字电路有关专业基础知识; 2)掌握数字电路的设计方法,特别就是熟悉模块化的设计思想; 3) 掌握QUARTUS-2软件的使用方法; 4) 熟练掌握EDA工具的使用,特别就是原理图输入,波形仿真,能对仿真波形进行分析; 5) 具备EDA技术基础,能够熟练使用VHDL语言进行编程,掌握层次化设计方法; 6) 掌握多功能数字钟的工作原理,学会不同进制计数器及时钟控制电路的设计方法; 7) 能根据设计要求对设计电路进行仿真与测试; 8) 掌握将所设计软件下载到FPGA芯片的下载步骤等等。 9) 将硬件与软件连接起来,调试电路的功能。 1、3课程设计的功能要求 基本功能:能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时,60分钟,60秒钟的计数器显示。 附加功能:1)能利用硬件部分按键实现“校时”“校分”“清零”功能; 2)能利用蜂鸣器做整点报时:当计时到达59’59’’时开始报时, 鸣叫时间1秒钟; 3)定时闹铃:本设计中设置的就是在七点时进行闹钟功能,鸣叫 过程中,能够进行中断闹铃工作。 本人工作:负责软件的编程与波形的仿真分析。 2、方案设计与分析

基于FPGA的数字钟设计

摘要 伴随着集成电路技术的发展, 电子设计自动化(EDA)技术逐渐成为数字电路设计的重要手段。基于FPGA的EDA技术的发展和应用领域的扩大与深入,使得EDA技术在电子信息,通信,自动控制,计算机等领域的重要性日益突出。 本设计给出了一种基于FPGA的多功能数字钟方法,采用EDA作为开发工具,VHDL语言和图形输入为硬件描述语言,QuartusII作为运行程序的平台,编写的程序经过调试运行,波形仿真验证,下载到EDA实验箱的FPGA芯片,实现了设计目标。 系统主芯片采用CycloneII系列EP2C35F672C8。采用自顶向下的设计思想,将系统分为五个模块:分频模块、计时模块、报时模块、显示模块、顶层模块。用VHDL语言实现各个功能模块, 图形输入法生成顶层模块. 最后用QuartusII 软件进行功能仿真, 验证数字钟设计的正确性。 测试结果表明本设计实现了一个多功能的数字钟功能,具有时、分、秒计时显示功能,以24小时循环计时;具有校正小时和分钟的功能;以及清零,整点报时功能。 关键词:EDA技术;FPGA;数字钟;VHDL语言;自顶向下

Abstract Accompanied by the development of integrated circuit technology, electro nic design automation (EDA) technology is becoming an important means of digital circuit design. FPGA EDA technology development and expansion of a pplication fields and in-depth, the importance of EDA technology in the field of electronic information, communication, automatic control, computer, etc. hav e become increasingly prominent. This design gives a FPGA-based multifunctional digital clock using ED A as a development tool, VHDL language and graphical input hardware descri ption language, the QuartusII as a platform for running the program, written procedures debugging and running, the waveform simulation downloaded to th e FPGA chip to achieve the design goals. The main system chip CycloneII series EP2C35F672C8. Adopted a topdw n design ideas, the system is divided into five modules: frequency module, ti ming module, timer module, display module, the top-level module. With VHD L various functional modules, graphical input method to generate the top-level module. Last QuartusII under simulation, to verify the correctness of the digi tal clock design. The test results show that the design of a multifunctional digital clock, with seconds time display, 24-hour cycle timing; has a school, cleared, and th e whole point timekeeping functions. Key words: EDA technology; FPGA; VHDL language; top-down; digital cloc k

监控安装教程八步安装好摄像机图解

如果摄像机只是固定监控某个位置不需要转动,那么只用摄像机支架就可以满足要求了。普通摄像机支架安装简单,价格低廉,而且种类繁多。

普通支架有短的、长的、直的、弯的,根据不同的要求选择不同的型号。室外支架主要考虑负载能力是否合乎要求,再有就是安装位置,因为从实践中我们发现,很多室外摄像机安装位置特殊,有的安装在电线杆上,有的立于塔吊上,有的安装在铁架上……由于种种原因,现有的支架可能难以满足要求,需要另外加工或改进,这里就不再多说了。 室内摄像机的安装高度以2.5~5m为宜,室外以3.5~10m为宜;电梯轿箱内安装在其顶部,与电梯操作器成对角处,且摄像机的光轴与电梯的两壁及天花板成45度。 摄像机的安装注意事项 摄像机的使用很简单,通常只要正确安装镜头、连通信号电缆,接通电源即可工作。但在实际使用中,如果不能正确地安装镜头并调整摄像机及镜头的状态,则可能达不到预期使用效果。应注意镜头与摄像机的接口,是C型接口还是CS型接口(这一点要切记,否则用C型镜头直接往CS接口摄像机上旋入时极有可能损坏摄像机的CCD芯片)。 安装镜头时,首先去掉摄像机及镜头的保护盖,然后将镜头轻轻旋入摄像机的镜头接口并使之到位。对于自动光圈镜头,还应将镜头的控制线连接到摄像机的自动光圈接口上,对于电动两可变镜头或三可变镜头,只要旋转镜头到位,则暂时不需校正其平衡状态(只有在后焦聚调整完毕后才需要最后校正其平衡状态)。 调整镜头光圈与对焦 关闭摄像机上电子快门及逆光补偿等开关,将摄像机对准欲监视的场景,调整镜头的光圈与对焦环,使监视器上的图像最佳。如果是在光照度变化比较大的场合使用摄像机,最好配接自动光圈镜头并作摄像机的电子快门开关置于OFF。如果选用了手动光圈则应将摄像机的电子快门开关置于ON,并在应用现场最为明亮(环境光照度最大)时,将镜头光圈尽可能开大并仍使图像为最佳(不能使图像过于发白而过载),镜头即调整完毕。装好防护罩并上好支架即可在以上调整过程中,若不注意在光线明亮时将镜头的光圈尽可能开大,而是关得比较小,

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)通过课程设计,锻炼书写有理论根据的、实事求是的、文理通顺的课程设计报告。

监控摄像头安装接线

第一步 拿出支架,准备好工具和零件:涨塞、螺丝、改锥、小锤、电钻等必要工具;按事先确定的安装位置,检查好涨塞和自攻螺丝的大小型号,试一试支架螺丝和摄像机底座的螺口是否合适,预埋的管线接口是否处理好,测试电缆是否畅通,就绪后进入安装程序。 第二步 拿出摄像头,按照事先确定的摄像头镜头型号和规格,仔细装上镜头(红外一体式摄像机不需安装镜头),注意不要用手碰镜头和CCD(图中标注部分),确认固定牢固后,接通电源,连通主机或现场使用监视器、小型电视机等调整好光圈焦距。 第三步 拿出支架、涨塞、螺丝、改锥、小锤、电钻等工具,按照事先确定的位置,装好支架。检查牢固后,将摄像头按照约定的方向装上; 第四步 如果需要安装护罩,在第二步后,直接从这里开始安装护罩。1、打开护罩上盖板和后挡板;2、抽出固定金属片,将摄像机固定好;3、将电源适配器装入护罩内;4、复位上盖板和后挡板,理顺电缆,固定好,装到支架上。 第五步 把焊接好的视频电缆BNC插头插入视频电缆的插座内,确认固定牢固。 第六步 将电源适配器的电源输出插头插入监控摄像机的电源插口,并确认牢固度。 第七步 把电缆的另一头接入控制主机或监视器(电视机),确保牢固。 第八步 接通监控主机和摄像机电源,通过监视器调整摄像机角度到预定范围 监控摄像机的安装方法: 1) 在满足监视目标视场范围要求的条件下,其安装高度:室内离地不宜低于2.5m;室外离地不宜低于3.5m。 2) 摄像机及其配套装置,如镜头、防护罩、支架、雨刷等,安装应牢固,运转应灵活,应注意防破坏,并与周边环境相协调。 3) 在强电磁干扰环境下,摄像机安装应与地绝缘隔离。 4) 信号线和电源线应分别引入,外露部分用软管保护,并不影响云台的转动。 5) 电梯厢内的摄像机应安装在厢门上方的左或右侧,并能有效监视电梯厢内乘员面部特征。 云台、解码器安装: 1) 云台的安装应牢固,转动时无晃动。 2) 应根据产品技术条件和系统设计要求,检查云台的转动角度范围是否满足要求。 3) 解码器应安装在云台附近或吊顶内(但须留有检修孔)。 控制设备安装:

FPGA实训报告——简易数字钟

桂林电子科技大学职业技术学院 课题:FPGA实训 专业:电子信息工程技术 学号: 姓名:

目录 关键词: (1) 引言: (1) 设计要求: (1) EDA技术介绍: (1) Verilog HDL简介: (1) 方案实现: (2) 工作原理: (2) 总结: (3) 结语: (3) 程序设计: (4)

数字钟 关键词:EDA、Verilog HDL、数字钟 引言: 硬件描述语言HDL(Hardware Des-cription Language)是一种用形式化方法来描述数字电路和系统的语言。目前,电子系统向集成化、大规模和高速等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计发放在业界得到迅猛发展,HDL在硬件设计领域的地位将与C和C++在软件设计领域的地位一样,在大规模数字系统的设计中它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法,而成为主要的硬件描述工具。 Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另外一种是VHDL。现在它们都已经成为IEEE标准。两者各有特点,但Verilog HDL拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。 此次以Verilog HDL语言为手段,设计了多功能数字钟,其代码具有良好的可读性和易理解性。 设计要求: 数字钟模块、动态显示模块、调时模块、到点报时模块等;必须有键防抖动功能。可自行设计8位共阴数码管显示;亦可用FPGA实验平台EDK-3SAISE上的4位数管,但必须有秒指导灯。 EDA技术介绍: 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 Verilog HDL简介: 硬件描述语言Verilog是Philip R.Moorby于1983年在英格兰阿克顿市的Gateway Design Automation硬件描述语言公司设计出来的,用于从开关级到算法级的多个抽象设

基于FPGA的Verilog HDL数字钟设计 -

基于FPGA的Verilog HDL数字钟设计 专业班级姓名学号 一、实验目的 1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程; 2.熟悉一种EDA软件使用; 3.掌握Verilog设计方法; 4.掌握分模块分层次的设计方法; 5.用Verilog完成一个多功能数字钟设计; 6.学会FPGA的仿真。 二、实验要求 ?功能要求: 利用实验板设计实现一个能显示时分秒的多功能电子钟,基本功能: 1)准确计时,以数字形式显示时、分、秒,可通过按键选择当前显示时间范围模式; 2)计时时间范围00:00:00-23:59:59 3)可实现校正时间功能; 4)可通过实现时钟复位功能:00:00:00 扩展功能: 5)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用板上LED或外接电路实现。 6)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---用板上LED或外接 7)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---用板上LED或外接 8)手动输入校时; 9)手动输入定时闹钟; 10)万年历; 11)其他扩展功能; ?设计步骤与要求: 1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。 2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系 统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。 3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快 得出仿真结果)。 4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit文件。 5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。

监控摄像头焦距与距离

监控摄像头焦距与距离一、监控摄像头镜头可视角度表 二、监控摄像头镜头可视距离表

1、镜头的焦距,视场大小及镜头到被摄取物体的距离的计算如下; f=w*D/W f=h*D/h f:镜头焦距w:图象的宽度(被摄物体在ccd靶面上成象宽度) W:被摄物体宽度 D:被摄物体至镜头的距离 h:图象高度(被摄物体在ccd靶面上成像高度)视场(摄取场景)高度 H:被摄物体的高度 ccd靶面规格尺寸:单位mm 规格W H 1/3" 4.8 3.6 1/2" 6.4 4.8 2/3"8.8 6.6 1"12.79.6 由于摄像机画面宽度和高度与电视接收机画面宽度和高度一样,其比例均为4:3, 当L不变,H或W增大时,f变小,当H或W不变,L增大时,f增大。 镜头大小的主要区别是:镜头越小看的越近,但是视觉范围越宽;镜头越大看的越远,但是视觉范围越窄. 选择镜头要点:

1、镜头大小可以自由选择. 根据摄像头监控的实际距离,参照上表选择相对合适的镜头毫米数.同系列产品镜头大小不影响价格。例如:宝贝名称为10米摄像机,而您的实际距离是25米.那么您可以选择8MM的镜头,产品价格不变,同样,宝贝名称为50米摄像机,而您的实际距离是35米,那么您可以选择12MM的镜头,产品价格不变。 2、镜头毫米数所对应的最佳距离,指的是发现距离.有客户问3.6MM的镜头,能看清10米内的人吗?回答是肯定的.这里说的"看清",是说的看清人的大致面貌和活动.如果要求看清楚人脸的话,选择更大的镜头.如图: 图中3个人的大致面貌和活动可以清楚的看到,如果是您熟悉的人,您一眼就可以认出来.如果是陌生人,您就没办法清楚的辨认五官。这个镜头是3.6MM的,看的距离是在10米左右。如果您换成16MM的镜头,就可以清楚的看出。但是视觉范围就很窄。上图右边的部分就看不到了。这也就是大镜头与小镜头的根本区别。如所需监控的范围较小,建议对照表格选择大一个规格的镜头。这样在清晰度(芯片线数)相同的情况下,目标物体看起来放的更大,细节看的更清楚,视觉效果更好;如您所需监控的范围较广,建议您对照表格选择规格相对大的镜头。在清晰度(芯片线数)相同的情况下,这样您会感官上觉得目标物体更清晰。

Verilog HDL数字时钟课程设计

课程设计报告 课程设计名称:EDA课程设计课程名称:数字时钟 二级学院:信息工程学院 专业:通信工程 班级:12通信1班 学号:1200304126 姓名:@#$% 成绩: 指导老师:方振汉 年月日

目录 第一部分 EDA技术的仿真 (3) 1奇偶校验器 (3) 1.1奇偶校验器的基本要求 (3) 1.2奇偶校验器的原理 (3) 1.3奇偶校验器的源代码及其仿真波形 (3) 28选1数据选择器 (4) 2.18选1数据选择器的基本要求 (4) 2.28选1数据选择器的原理 (4) 2.38选1数据选择器的源代码及其仿真波形 (5) 34位数值比较器 (6) 3.14位数值比较器的基本要求 (6) 3.24位数值比较器的原理 (6) 3.34位数值比较器的源代码及其仿真波形 (7) 第二部分 EDA技术的综合设计与仿真(数字时钟) (8) 1概述 (8) 2数字时钟的基本要求 (9) 3数字时钟的设计思路 (9) 3.1数字时钟的理论原理 (9) 3.2数字时钟的原理框图 (10) 4模块各功能的设计 (10) 4.1分频模块 (10) 4.2计数模块(分秒/小时) (11) 4.3数码管及显示模块 (13) 5系统仿真设计及波形图........................... 错误!未定义书签。5 5.1芯片引脚图.................................... 错误!未定义书签。5 5.2数字时钟仿真及验证结果 (16) 5.3数字时钟完整主程序 (17) 6课程设计小结 (23) 7心得与体会 (23) 参考文献 (24)

基于FPGA的数字钟设计

南昌大学实验报告 学生姓名:邓儒超学号:6100210045 专业班级:卓越通信101 实验类型:□验证□综合□√设计□创新实验日期:2012.10.28 实验成绩: 实验三数字钟设计 一、实验目的 (1)掌握数字钟的设计 二、实验内容与要求 (1)设计一个数字钟,要求具有调时功能和24/12进制转换功能 (2)进行波形仿真,并分析仿真波形图; (3)下载测试是否正确; 三、设计思路/原理图 本次数字钟的设计采用了自顶向下分模块的设计。底层是实现各功能的模块,各模块由vhdl语言编程实现:顶层采用原理图形式调用。其中底层模块包括秒、分、时三个计数器模块、按键去抖动模块、按键控制模块、时钟分频模块、数码管显示模块,其中,时计数器模块又包括24进制计数模块、12进制计数模块、24/12进制转换模块。设计框图如下: 由图可以清晰的看到数字钟系统设计中各功能模块间连接关系。系统时钟1KHZ经过分频后产生1秒的时钟信号,1秒的时钟信号作为秒计数模块的输入信号,秒计数模块产生的进位信号作为分计数模块的输入信号,分计数模块的进位信号作为时计数模块的输入信号。秒计数模块、分计数模块、时计数模块的计数输出分别送到显示模块。由于设计中要使用按键进行调节时间,而按键的动作过程中存在产生得脉冲的不稳定问题,所以就牵扯到按键去抖动的问题,对此系统中设置了按键去抖动模块,按键去抖动模块产生稳定的脉冲信号送入按键控制模块,按键控制模块根据按键的动作对秒、分、时进行调节。 原理图如下:

四、实验程序(程序来源:参考实验室里的和百度文库的稍加改动,还有自己写的) 1、分频模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpin IS PORT(CLK:IN STD_LOGIC; CLK1:OUT STD_LOGIC); END fenpin; ARCHITECTURE behav OF fenpin IS SIGNAL X,CNT:STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN P1:PROCESS(CLK) BEGIN X<="001111101000";--1000分频 IF CLK'EVENT AND CLK = '1' THEN CNT<=CNT+1; IF CNT=X-1 THEN CLK1<='1';CNT<="000000000000"; ELSE CLK1<='0'; END IF; END IF; END PROCESS; END behav; 2、60进制计数器(秒、分计数器)模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count60 IS PORT(EN,RST,CLK1: IN STD_LOGIC; Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COUT: OUT STD_LOGIC); END count60;

监控镜头毫米数与距离对照表

监控镜头毫米数与距离对照表 摄像机拍摄的视角与镜头的毫米数、CCD的尺寸大小密不可分,下表为镜头毫米数与搭配的CCD拍摄视角的对应关系,可供大家参考: 镜头焦距搭配1/3" CCD 搭配1/4" CCD 二者的角度差异 2.8 mm 89.9°75.6°14.3° 3.6 mm 75.7 °62.2°13.5° 4 mm 69.9 °57.0°12.9° 6 mm 50.0 °39.8°10.2° 8 mm 38.5 °30.4°8.1° 12 mm 26.2 °20.5° 5.7° 16 mm 19.8 °15.4° 4.4° 25 mm 10.6 °8.3° 2.3° 60 mm 5.3 ° 4.1° 1.2° 1/3" CCD 搭配镜头拍摄范围的尺寸如下表所示: 镜头焦距距离5米距离10米距离15米距离20米距离30米 (毫米数) (宽×高) (宽×高) (宽×高) (宽×高) (宽×高) 2.8mm 13×9.8米26×19.5米39×29.3米52×39米78×58.5米 3.6mm 8.5×6.4米17×12.8米25.5×19米34×25.5米51×38.3米 4mm 8×6米16×12米24×18米32×24米48×36米 6mm 5.5×4.1米11×8.3米16.5×12.4米22×16.5米33×24.8米 8mm 3.5×2.6米7×5.3米10.5×7.9米14×10.5米21×15.8米 12mm 2×1.5米4×3米6××4.5米8×6米12×9米 16mm 1.5×1.1米3×2.3米 4.5×3.4米6×4.5米9×6.8米 25mm 1.3×1米 2.5×1.9米 3.8×2.9米5×3.8米7.5×5.6米 60mm 0.5×0.4米1×0.75米 1.5×1.1米2×1.5米3×2.3米 备注:同样毫米数的镜头搭配1/4"的CCD芯片拍摄的范围和角度稍微窄一点,但是拍摄画面中的物体看起来要大一点.表中的数据为水平方向的视场角度,如果摄像机装在高处往低处监看时,视场角和拍摄范围要稍微大一些,但拍摄画面中的物体要稍微小一点 镜头毫米数与对应距离的参数表 镜头参数 3.6/4MM 6MM 8MM 12MM 16MM 25MM 60MM 镜头角度75.7/69.6度50.0度38.5度26.2度19.8度10.6度 5.3度 最佳距离10米内20米内30米内40米内50米内60米内80米内 镜头大小的主要区别是:镜头越小看的越近,但是视觉范围越宽;镜头越大看的越远,但是视觉范围越窄. 我们宝贝分类里面,半球型摄像头可以选配3.6MM或者6MM的镜头; 30米以内红外防水摄像机可以选配3.6MM、6MM或者8MM的镜头; 30米以上红外防水摄像机可以选配4MM、6MM、8MM、12MM、16MM、25MM的镜头..(这些镜头都是全金属的

FPGA课程设计多功能数字钟讲解

多功能数字钟 开课学期:2014—2015 学年第二学期课程名称:FPGA课程设计 学院:信息科学与工程学院 专业:集成电路设计与集成系统班级: 学号: 姓名: 任课教师: 2015 年7 月21 日

说明 一、论文书写要求与说明 1.严格按照模板进行书写。自己可以自行修改标题的题目 2.关于字体: a)题目:三号黑体加粗。 b)正文:小四号宋体,行距为1.25倍。 3.严禁抄袭和雷同,一经发现,成绩即判定为不及格!!! 二、设计提交说明 1.设计需要提交“电子稿”和“打印稿”; 2.“打印稿”包括封面、说明(即本页内容)、设计内容三部分;订书机左边装订。 3.“电子稿”上交:文件名为“FPGA课程设计报告-班级-学号-姓名.doc”,所有报告发送给班长,由班长统一打包后统一发送到付小倩老师。 4.“打印稿”由班长收齐后交到:12教305办公室; 5.上交截止日期:2015年7月31日17:00之前。

第一章绪论 (3) 关键词:FPGA,数字钟 (3) 第二章FPGA的相关介绍 (4) 2.1 FPGA概述 (4) 2.2 FPGA特点 (4) 2.3 FPGA设计注意 (5) 第三章Quartus II与Verilog HDL相关介绍 (7) 3.1 Quartus II (7) 3.2 Verilog HDL (7) 第四章设计方案 (8) 4.1数字钟的工作原理 (8) 4.2 按键消抖 (8) 4.3时钟复位 (8) 4.4时钟校时 (8) 4.5数码管显示模块。 (8) 第五章方案实现与验证 (9) 5.1产生秒脉冲 (9) 5.2秒个位进位 (9) 5.3按键消抖 (9) 5.4复位按键设置 (10) 5.5 数码管显示。 (10) 5.6 RTL结构总图 (11) 第六章实验总结 (14) 第七章Verilog HDL源代码附录 (15)

基于FPGA的多功能数字钟的设计

基于FPGA的多功能数字钟的设计 摘要数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常生活中不可少的必需品。本文介绍了应用FPGA芯片设计多功能数字钟的一种方案,并讨讨论了有关使用FPGA芯片和VHDL语言实现数字钟设计的技术问题。关键词数字钟、分频器、译码器、计数器、校时电路、报时电路。 Design of Abstract Keywords

目录 0.引言 (4) 1.设计要求说明 (4) 1.1设计要求 (4) 1.2完成情况说明 (4) 2.多功能数字钟的基本原理及其在FPGA中的设计与实现 (4) 2.1计时电路 (5) 2.2异步清零电路 (5) 2.3校时、校分功能电路 (5) 2.4报时电路 (6) 2.5分频电路 (7) 2.6闹钟及音乐闹铃电路 (9) 2.7秒表计时电路 (15) 2.8译码显示电路 (15) 2.9逻辑总图 (16) 3.设计感想 (17) 参考文献 (17)

0.引言 数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。因此,研究数字钟及扩大其应用,有着非常现实的意义。 1.设计要求说明 1.1设计要求 1)设计一个具有校时、校分、清零,保持和整点报时功能的数字钟。 2)多数字钟采用层次化的方法进行设计,要求设计层次清晰、合理;构成整个设计的功能模块既可采用原理图方法实现,也可采用文本输入法实 现。 3)数字钟的具体设计要求具有如下功能: ①数字钟的最大计时显示23小时59分59秒; ②在数字钟正常工作时可以进行快速校时和校分,即拨动开关K1可对小 时进行校正,拨动开关K2可对分钟进行校正; ③在数字钟正常工作情况下,可以对其进行不断电复位,即拨动开关K3 可以使时、分、秒回零; ④整点报时是要求数字钟在每小时整点来到前进行鸣叫,鸣叫频率是在 59分53秒、55秒、57秒时为500Hz,59分59秒时为1KHz; ⑤哟啊去所有开关具有去抖动功能。 4)对设计电路进行功能仿真。 5)将仿真通过的逻辑电路下载到EDA实验系统,对其进行验证。 1.2完成情况说明: 对于实验要求的基本功能我们设计的电路都能准确实现。另外,我们还附加了显示星期、秒表、闹钟时间来时播放音乐等功能。 2.多功能数字钟的基本原理及其在FPGA中的设计与实现 通过分析多功能数字钟的设计要求和所要实现的功能,应用层次化方法设计出数字钟应由计时模块、分频脉冲模块、译码显示模块、校时校分和清零模块、报时模块等几个模块组成,其原理框图如下图1所示:

fpga数字钟课程设计报告

课程设计报告 设计题目:基于FPGA的数字钟设计 班级:电子信息工程1301 学号:20133638 姓名:王一丁 指导教师:李世平 设计时间:2016年1月

摘要 EDA(Electronic Design Automation)电子设计自动化,是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成软件方式设计得电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次课程设计利用Quartus II 为设计软件,VHDL为硬件描述语言,结合所学知识设计一个多功能时钟,具有显示年、月、日、时、分、秒显示,计时,整点报时,设定时间等功能。利用硬件描述语言VHDL 对设计系统的各个子模块进行逻辑描述,采用模块化的思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑综合优化、逻辑仿真、最终完成本次课程设计的任务。 关键词:EDA VHDL语言数字钟

目录 摘要 1 课程设计目的 2 课程设计内容及要求 2.1 设计任务 2.2 设计要求 3 VHDL程序设计 3.1方案论证 3.2 系统结构框图 3.3设计思路与方法 3.3.1 状态控制模块 3.3.2 时分秒模块 3.3.3 年月日模块 3.3.4 显示模块 3.3.5脉冲产生模块 3.3.6 扬声器与闹钟模块 3.4 RTL整体电路 4 系统仿真与分析 5 课程设计总结,包括.收获、体会和建议 6 参考文献

1 课程设计目的 (1)通过设计数字钟熟练掌握EDA软件(QUARTUS II)的使用方法,熟练进行设计、编译,为以后实际工程问题打下设计基础。 (2)熟悉VHDL 硬件描述语言,提升分析、寻找和排除电子设计中常见故障的能力。 (3)通过课程设计,锻炼书写有理论根据的、实事求是的、文理通顺的课程设计报告。 2 课程设计内容及要求 2.1 设计任务 (1)6个数字显示器显示时分秒,setpin按键产生一个脉冲,显示切换为年月日。 (2)第二个脉冲可预置年份,第三个脉冲可以预置月份,依次第四、 五、六、七个脉冲到来时分别可以预置时期、时、分、秒,第八个脉冲到来后预置结束正常从左显示时分秒。 (3)up为高时,upclk有脉冲到达时,预置位加一,否则减一。 2.2 设计要求 (1)在基本功能的基础上,闹钟在整点进行报时,产生一定时长的高电平。 (2)实现闹钟功能,可对闹钟时间进行预置,当达到预置时间时进行报时。

基于FPGA的数字时钟

xxxx大学 电子设计自动化技术与应用 设计报告 设计题目:基于FPGA的数字时钟 学院:通信学院 姓名: 学号:

目录 一、设计任务 (3) 二、总体设计方案 (3) 1、设计思想 (3) 2、总体设计框图 (3) 三、单元电路设计 (4) 1、秒计数器模块设计与实现 (4) 2、分计数器模块设计与实现 (5) 3、时计数器模块设计与实现 (6) 4、2选1选择器模块设计与实现 (7) 5、译码器模块的设计与实现 (8) 6、3-8线译码器模块设计与实现 (9) 7、分频器的设计与实现 (9) 8、顶层原理设计图 (10) 四、硬件测试与结果分析 (11) 1、硬件测试: (11) 2、测试过程及结果分析 (12) 五、收获与体会 (12)

一、设计任务 1、能进行正常的时、分、秒计时功能,由LED数码管显示时间,最大计时 为23:59:59。 2、小时显示采用24进制,分显示和秒显示都采用60进制。 3、具有调时和调分功能。 二、总体设计方案 1、设计思想 本设计是基于Altera公司的Cyclone III 系列的EP3C16Q240C8芯片设计的,采用层次化设计方式,先设计数字时钟的底层器件:秒计数器、分计数器、时计数器、2选1选择器、译码器、分频器。顶层采用原理图设计方式,将所设计的底层器件连接起来构成一个具有计时和调时功能的数字时钟。 2、总体设计框图 完整的数字时钟设计硬件框图如图所示。

三、单元电路设计 1、秒计数器模块设计与实现 1.1秒计数器流程图如下: 1.2秒计数器生成模块如图1所示: 图1 其中,clk 是时钟信号,daout 是60计数输出,enmin 是向分进位的高电平。 1.3 波形仿真图

解码器与云台镜头及报摄像机电源接线示意图

解码器与云台镜头及报摄像机电源接线示意图: 使 用 说 明 书 (通用型) 公共 光圈 聚焦 变焦 终端开关 LED 地址开关 协议开关 AC 24V 辅助2 辅助1 自动 右 左 下 上 公共

技术参考: 工作电压: 工作电流:AC 200mA(不含云台工作电流)环境温度:-30o C-+70o C 自身温度:≤50o C(3小时后恒定温度) 工作寿命:继电器触点寿命20万次 元器件八年 镜头电压:DC 6-12(可调整) 镜头控制:光圈、聚焦、变倍 云台电压:AC 24V/220V(可选择) 云台控制:上、下、左、右、自动 摄像机电源:DC 12V,800Ma 通讯接口:RS485/RS232(可选) 辅助开关:3个(2常开触点,1个AC 24V)5.解码器安装尺寸: 下图为解码器背面安装孔位示意图。 1.用型、加强型安装尺寸: A-B=121mm B-D=225mm AD=BD 2.室内塑胶型安装尺寸: A-B=108mm B-D=175mm AD=BD AC 220V+10%

4. 常见故障排除: 以下所死故障主要是针对解码器而言,有关系统主机及云台镜头的故障在此不再作讨论。. 指示灯不亮,解码器不动作 可能原因: ①无电源; ②LED 开关未短接 ③保险烧坏;(此种情形最多,主要是因为错误地连接云台控 制线而造成) 自检正常,但无法控制 可能原因 ④协议庙宇不正确 ⑤地址设置不正确 ⑥数据线接 ⑦通讯线路故障 ⑧码转换器故障 自检正常,部分功能控制失效 可能原因 ⑨协议不正确 ⑩R232与RS485转换器故障,未按RS485的布线规则布线 电源指示灯亮,但自检不起作用 可能原因: 此种情况比较少见。 当系统无法自检时,证明此解码器有故障,请联系您的经销商或直接与生产商联系,不要随意自行拆卸,以免故障范围扩大 1.设备概述 本解码器是与安防监控系统设备配套使用的一种前端控制设备,可控制室内外云台,电动变焦镜头,一体化摄像机,灯光或雨刷。支持RS-232和RS-485两种通讯接口,兼容多种控制协议。其款式多样,外型设计美观大方,且具有超强的防雷、抗死机性能,性价比极高,是各款数字硬盘录像系统及矩阵系统最理想的配套设备。 2.系统设置 ●自检: 按“自检”开关将对云台、镜头功能进行自检控制,自检时,将对每一项进行为时一秒钟的动作,通过自检,您可以听到解码 器内继电器动作的声音,看到主板上LED的闪亮,以及云台镜 头的动作,从而方便检测解码器的好坏,及云台、镜头接线是否 正确等等。 ●通讯协议选择: “协议选择”协议开关是解码器通讯协议选择开关。系统最多可提供16种协议供用户选择。您需要根据下表所列,为您的 系统以及解码器选择个最合适的协议,并设定之。 协议及波特率选择表 序号 协议开关 通讯协议推荐使用波特率

基于FPGA的数字时钟的设计1

基于FPGA 的数字时钟的设计 课 题: 基于FPGA 的数字时钟的设计 学 院: 电气信息工程学院 专 业 : 测量控制与仪器 班 级 : 08测控(2)班 姓 名 : 潘 志 东 学 号 : 08314239 合作者姓名: 颜志林 2010 年 12 月 12 日

综述 近年来随着数字技术的迅速发展,各种中、大规模集成电路在数字系统、控制系统、信号处理等方面都得到了广泛的应用。这就迫切要求理工科大学生熟悉和掌握常用中、大规模集成电路功能及其在实际中的应用方法,除通过实验教学培养数字电路的基本实验方法、分析问题和故障检查方法以及双踪示波器等常用仪器使用方法等基本电路的基本实验技能外,还必须培养大学生工程设计和组织实验能力。 本次课程设计的目的在于培养学生对基本电路的应用和掌握,使学生在实验原理的指导下,初步具备基本电路的分析和设计能力,并掌握其应用方法;自行拟定实验步骤,检查和排除故障、分析和处理实验结果及撰写实验报告的能力。综合实验的设计目的是培养学生初步掌握小型数字系统的设计能力,包括选择设计方案,进行电路设计、安装、调试等环节,运用所学知识进行工程设计、提高实验技能的实践。数字电子钟是一种计时装置,它具有时、分、秒计时功能和显示时间功能;具有整点报时功能。 本次设计我查阅了大量的文献资料,学到了很多关于数字电路方面的知识,并且更加巩固和掌握了课堂上所学的课本知识,使自己对数字电子技术有了更进一步的认识和了解。

1、课题要求 1.1课程设计的性质与任务 本课程是电子与信息类专业的专业的专业基础必修课——“数字电路”的配套实验课程。目的在于培养学生的理论联系实际,分析和解决问题的能力。通过本课程设计,使学生在理论设计、计算机仿真、指标调测、故障排除等方面得到进一步的训练,加强学生的实践能力。学生通过设计、仿真、调试、撰写设计报告等过程,培养学生的动手能力和严谨的工作作风。 1.2课程设计的基本技术要求 1)根据课题要求,复习巩固数字电路有关专业基础知识; 2)掌握数字电路的设计方法,特别是熟悉模块化的设计思想; 3) 掌握QUARTUS-2软件的使用方法; 4) 熟练掌握EDA工具的使用,特别是原理图输入,波形仿真,能对仿真波形进行分析; 5) 具备EDA技术基础,能够熟练使用VHDL语言进行编程,掌握层次化设计方法; 6) 掌握多功能数字钟的工作原理,学会不同进制计数器及时钟控制电路的设计方法; 7) 能根据设计要求对设计电路进行仿真和测试; 8) 掌握将所设计软件下载到FPGA芯片的下载步骤等等。 9) 将硬件与软件连接起来,调试电路的功能。 1.3课程设计的功能要求 基本功能:能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时,60分钟,60秒钟的计数器显示。 附加功能:1)能利用硬件部分按键实现“校时”“校分”“清零”功能; 2)能利用蜂鸣器做整点报时:当计时到达59’59’’时开始报时,鸣叫时间1秒钟; 3)定时闹铃:本设计中设置的是在七点时进行闹钟功能,鸣叫过程中,能够进行中断闹铃工作。 本人工作:负责软件的编程与波形的仿真分析。 2、方案设计与分析

相关文档
相关文档 最新文档