FPGA用2-4译码器元件实现4-16译码器

在这里插入图片描述

原理图如上

知道原理图 代码也就ok了

需要两个vhdl文件
一个是main文件 也就是主输入输出
另一个是 元件vhdl 实现部分输入输出 在这里指 2-4译码器

由于之前写的奇偶判别器 没有改实体名 这点可以忽略

主程序如下

entity jiou is 
	port(
		signal x:in bit_vector(3 downto 0);
		signal en:in bit;
		signal z:out bit_vector(15 downto 0)
	);
end entity;

architecture behave of jiou is
	signal enchild:bit_vector(3 downto 0);
	component jo21 is
		port(
			signal x:in bit_vector(1 downto 0 );
			signal en:in bit;
			signal y:out bit_vector(3 downto 0)
		);
	end component;
	begin

	u1:jo21 port map(x(3 downto 2),en,enchild(3 downto 0));
	u2:jo21 port map(x(1 downto 0),enchild(3),z(15 downto 12));
	u3:jo21 port map(x(1 downto 0),enchild(2),z(11 downto 8));
	u4:jo21 port map(x(1 downto 0),enchild(1),z(7 downto 4));
	u5:jo21 port map(x(1 downto 0),enchild(0),z(3 downto 0));
end architecture;

子程序如下

entity jo21 is
	port(
		signal x:in bit_vector(1 downto 0 );
		signal en:in bit;
		signal y:out bit_vector(3 downto 0)
	);
end entity;

architecture behave of jo21 is
signal k:bit_vector(2 downto 0);
begin
	k<=en&x;
	with k select
	y<="0001" when "100",
		"0010" when "101",
		"0100" when "110",
		"1000" when "111",
		"0000" when others;
	 
end architecture;

仿真波形图 部分如下
在这里插入图片描述

如此即可 。
如果本篇博客有用的话 请点个赞再走呗

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
集成运放参数测试仪[2005年电子大赛一等奖] 摘要:本系统参照片上系统的设计架构、采用FPGA与SPCE061A相结合的方法,以SPCE06 1A单片机为进程控制和任务调度核心;FPGA做为外围扩展,内部自建系统总线,地址译 码采用全译码方式。FPGA内部建有DDS控制器,单片机通过系统总线向规定的存储单元中 送入正弦表;然后DDS控制器以设定的频率,自动循环扫描,生成高精度,高稳定的5Hz 基准测量信号。扫频信号通过对30MHz的FPGA系统时钟进行分频和外部锁相环(FPGA采用 FLEX10K10无内部锁相环)倍频,产生高频率稳定度、幅值稳定度的扫频信号。放大器参 数测量参照GB3442- 82标准,低频信号幅度的测量采取AD高速采样,然后进行数字处理的方法;高频信号的 幅度直接采用集成有效值转换芯片测得。A/D转换采用SPCE061A内部自带的10位AD。SPC E061A主要实现用户接口界面(键盘扫描、液晶显示、数据打印以及其他服务进程的调度 )、AD转换以及测量参数(Vio Iio Kcmr Avd BWG Tr)计算、与上位机通信等方面的功能。上位机主要实现向下位机发送测量指令、与下 位机交换测量数据、以及数据的存储、回放、统计。 关键词: 参数测量 运算放大器 DDS FPGA SPCE061A 数字信号处理 一、方案比较设计与论证 (一)测量电路模块 1、测试信号源部分   方案一:利用传统的模拟分立元件或单片压控函数发生器MAX038,可产生三角波、 方波、正弦波,通过调整外围元件可以改变输出频率、幅度,但采用模拟器件由于元件 分散性太大,即使用单片函数发生器,参数也与外部元件有关,外接电阻电容对参数影 响很大,因而产生的频率稳定度较差、精度低、抗干扰能力差、成本也较高。   方案二:采用锁相式频率合成方案。锁相式频率合成是将一个高稳定度和高精度的 标准频率经过运算,产生同样稳定度和精确度的大量离散频率的技术,他在一定程度上 满足了既要频率稳定精确,又要在大范围内变化的矛盾。但其波形幅度稳定度较差,在 低频内波形不理想。   方案三:采用DDS技术。DDS以Nyquist时域采样定理为基础,在时域内进行频率合成 ,其相位、幅度都可以实现程控,而且用FPGA实现非常简单。   在这里我们只需要一个5Hz的单一稳定频率,要求其频率,幅度稳定。综合考虑,我 们采用方案三,实现了高精度,高稳定度的5Hz测试信号源。 2、主测试电路   方案一:将测试放大器参数的实现分成4个电路检测。该方案实现各个参数的测量比 较好,且有利于各个参数调试。但是对于要实现智能测试该方案较复杂,在电路中所用 的继电器太多,很容易引起电磁干扰,不利于系统的整体性能提高,且不能实现电路的 智能测试。   方案二:采用一级运放。该电路经过仔细的分析会发现它设计的非常的巧妙调试也 很方便,不会产生自激、饱和等情况。缺点就是对与精度较高的运算放大器该方案实现 不了。   方案三:采用试题中所给的电路。这是一个二级的电路,测试精度非常的高。但在 调试中我们发现它很容易出现自激,为了使整个电路保持稳定,我们采取了一系列的稳 定措施,如采用雕刻机雕刻线路,并实现大面积的接地,辅助运放加入补偿矫正网络等 。   综合上述,为了实现自动测量,保证测试有更高的精度,采用方案三。 3、信号放大电路   方案一:采用普通的运算放大器放大电路。运算放大器放大电路成熟可靠,选用不 同的运算放大器,能够对各种信号进行很好放大。但其放大值固定,不能动态调整,不 便于处理大范围变化信号。   方案二:采用程控可增益放大器。程控可增益放大器可用单片机方便的进行增益设 定,十分有利于处理大动态范围信号。   由于测量信号动态范围大,要有效的采样处理,就要求放大器增益可动态调整,由 此我们选用方案二,采用可编程增益放大器AD625和数字电位器AD737组成程控增益放大 器,实现对测量信号的有效放大。 4、滤波电路   方案一:采用二阶切比雪夫低通滤波器或二阶巴特沃斯低通滤波器。切比雪夫 滤波器的幅度响应在通带内是在两值之间波动,在通带内波动的次数取决于滤波器的阶 数。理想的在靠近截止频率的范围内比巴特沃斯有更接近矩形的频率响应。但这一点是 一在频带内允许波动为代价的。巴特沃斯低通滤波器幅频响应是单调下降的,其N阶低通 滤波器的前(2N-1)阶导数在频率为零处始终为零,故又称为最大平坦幅度滤波器。   方案二:采用数字滤波。数字滤波有极大的灵活性,可以在不增加任何硬件成本的 基础上对信号进行有效的滤波,而且可以实现模拟器件难以实现的高阶滤波。但要进行 高效率的滤波,对AD采样要求有较高的采样速率和时实性,对单片机要求有较高的数据 运算速度。   方案三:采用模拟滤波器加数字滤波
状态控制电路的VHDL实现如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY controllor IS PORT( RESET:IN STD_LOGIC; --复位信号 KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输入时间 SET_T:IN STD_LOGIC; --时间设置信号 START:IN STD_LOGIC; --开始烹调信号 TEST:IN STD_LOGIC; --显示电路测试信号 CLK:IN STD_LOGIC; --时钟脉冲 DONE:IN STD_LOGIC; --完成信号 COOK:OUT STD_LOGIC; --指示烹调状态,提示计时器开始计数 LD_TEST:OUT STD_LOGIC; --指示数据装载电路载入的用于测试的数据 LD_CLK:OUT STD_LOGIC; --指示数据装载电路载入设置时间数据 DATA:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--16位数据 LED_SET_T:OUT STD_LOGIC; --LED显示状态 LD_DONE:OUT STD_LOGIC --LED显示完成 ); END controllor; ARCHITECTURE rtl OF controllor IS TYPE STATES IS(IDLE,LAMP_TEST,SET_CLOCK,TIMER,DONE_MSG); SIGNAL NXT,CUR:STATES; --2个信号:下一状态、当前状态 SIGNAL DATATMP:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL SET_T0: STD_LOGIC; --设置时间信号 BEGIN PROCESS(CLK,RESET) --时钟和复位的进程 BEGIN IF RESET='1' THEN --复位时将IDLE(显示0000)赋予当前状态 CUR<=IDLE; ELSIF CLK'EVENT AND CLK='1' THEN CUR<=NXT; --如果不是,遇到上边沿则自动跳转下一状态 END IF; END PROCESS; PROCESS(RESET,KEY) --复位和输入的进程 BEGIN --可以让输入4位数字 显示时间 IF RESET = '1' THEN --复位时不论任何状态数码管都将显示0000 DATATMP <= (others => '0'); ELSE IF KEY(3)'EVENT AND KEY(3) = '1' THEN --设置分的十位 IF DATATMP(15 DOWNTO 12) = "0101" THEN --5自动跳转到0 DATATMP(15 DOWNTO 12) <= "0000"; ELSE DATATMP(15 DOWNTO 12) <= DATATMP(15 DOWNTO 12) + 1; END IF; --否则自动加1 END IF; IF KEY(2)'EVENT AND KEY(2) = '1' THEN --设置分的个位 IF DATATMP(11 DOWNTO 8) = "1001" THEN --9自动跳转到0 DATATMP(11 DOWNTO 8) <= "0000"; ELSE DATATMP(11 DOWNTO 8) <= DATATMP(11 DOWNTO 8) + 1; END IF; --否则自动加1 END IF; IF KEY(1)'EVENT AND KEY(1) = '1' THEN --设置秒的十位 IF DATATMP(7 DOWNTO 4) = "0101" THEN --5自动跳转到0 DATATMP(7 DOWNTO 4) <= "0000"; ELSE DATATMP(7 DOWNTO 4) <= DATATMP(7 DOWNTO 4) + 1; END IF; --否则自动加1 END IF; IF KEY(0)'EVENT AND KEY(0) = '1' THEN --设置秒的个位 IF DATATMP(3 DOWNTO 0) = "1001" THEN --9自动跳转到0 DATATMP(3 DOWNTO 0) <= "0000"; ELSE DATATMP(3 DOWNTO 0) <= DATATMP(3 DOWNTO 0) + 1; END IF; END IF; --否则自动加1 END IF; DATA <= DATATMP; END PROCESS; PROCESS(SET_T,RESET) --设置时间和复位进程 BEGIN IF RESET = '1' THEN --复位时设置时间变为低电平 SET_T0 <= '0'; ELSIF SET_T'EVENT AND SET_T = '1' THEN --按下SET_T键时 SET_T0 <= NOT SET_T0; --SET_T非它前之状态 END IF; IF SET_T0 = '1' THEN LED_SET_T <= '1'; --赋予SET_T持续电平 ELSE LED_SET_T <= '0'; --赋予SET_T持续电平 END IF; END PROCESS; PROCESS(CLK,CUR,SET_T,START,TEST,DONE) IS BEGIN NXT<=IDLE; --将IDLE载入NXT LD_TEST<='0'; --复位 LD_DONE<='0'; LD_CLK<='0'; COOK<='0'; CASE CUR IS WHEN LAMP_TEST=> --译码器显示测试状态 LD_TEST<='1'; COOK<='0'; WHEN SET_CLOCK=> --烹调时间测试状态 LD_CLK<='1'; COOK<='0'; WHEN DONE_MSG=> --完成信息显示状态 LD_DONE<='0'; COOK<='0'; WHEN IDLE=> --初始状态定义 IF TEST='1' THEN NXT<=LAMP_TEST; --设置TEST LD_TEST<='1'; ELSIF SET_T0='1' THEN --设置 SET_T NXT<=SET_CLOCK; LD_CLK<='1'; ELSIF START='1' AND DONE='0' THEN --设置计时模式 NXT<=TIMER; COOK<='1'; END IF; WHEN TIMER=> IF DONE='1' THEN --设置计时完成 NXT<=DONE_MSG; LD_DONE<='0'; ELSE NXT<=TIMER; COOK<='1'; END IF; -- WHEN OTHERS=>NULL; END CASE; END PROCESS; END rtl; -------------------------------------------------------------------------------------- --数据装载电路的VHDL实现如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY loader IS PORT( DATAIN:IN STD_LOGIC_VECTOR(15 DOWNTO 0); --输入16位数据 LD_TEST:IN STD_LOGIC; LD_CLK:IN STD_LOGIC; LD_DONE:IN STD_LOGIC; DATAOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); --输出16位数据 LOAD:OUT STD_LOGIC --选择状态 ); END loader; ARCHITECTURE rtl OF loader IS BEGIN PROCESS(DATAIN,LD_TEST,LD_CLK,LD_DONE) CONSTANT ALLS:STD_LOGIC_VECTOR(15 DOWNTO 0)--测试信息 :="1000100010001000"; --显示8888 CONSTANT DONE:STD_LOGIC_VECTOR(15 DOWNTO 0)--烹调完成信息 :="1010101111001101"; VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN LOAD<=LD_TEST OR LD_DONE OR LD_CLK; --三选一状态 TEMP:=LD_TEST&LD;_DONE&LD;_CLK; --中间变量定义 CASE TEMP IS WHEN"100"=>--测试 DATAOUT<=ALLS; WHEN"010"=>--烹调完成 DATAOUT<=DONE; WHEN"001"=> DATAOUT<=DATAIN; WHEN OTHERS=>NULL; END CASE; END PROCESS; END rtl; -------------------------------------------------------------------------------------------------- --十进制计数器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt10 IS PORT( CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; --CLR:清除数据 EN:IN STD_LOGIC; --信号使能 DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输入的4位数据 Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --输出的4位数据 CARRY_OUT:OUT STD_LOGIC --数据装载 ); END cnt10; ARCHITECTURE rtl OF cnt10 IS SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); --链接输入输出 BEGIN --数据的信号 PROCESS(CLK,LOAD,CLR,EN) BEGIN IF CLR = '1' THEN --当CLR高电平,数据变为0000 TMP<= "0000"; ELSIF LOAD='1'THEN --否则装载输入的数据 TMP<=DATAIN; ELSIF CLK'EVENT AND CLK='0'THEN --上升沿时,执行10进制减法 IF EN='1'THEN IF TMP="0000"THEN --0跳转到9 TMP<="1001"; ELSE --自动减1 TMP<=TMP-'1'; END IF; END IF; END IF; IF TMP="0000"THEN CARRY_OUT<='1'; --COOK<=CARRY_OUT ELSE CARRY_OUT<='0'; END IF; END PROCESS; Q<=TMP; END rtl; -------------------------------------------------------------------------------------------------- --六进制减法计数器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt6 IS PORT( CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; EN:IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC ); END cnt6; ARCHITECTURE rtl OF cnt6 IS SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK,LOAD,CLR,EN) BEGIN IF CLR = '1' THEN TMP<= "0000"; ELSIF LOAD='1' THEN TMP<=DATAIN; ELSIF CLK'EVENT AND CLK='0'THEN --上升沿时进行6进制减法 IF EN='1'THEN IF TMP="0000"THEN --0自动跳转到5 TMP<="0101"; ELSE TMP<=TMP-'1'; --否则自动减1 END IF; END IF; END IF; IF TMP="0000"THEN CARRY_OUT<='1'; --赋值给COOK ELSE CARRY_OUT<='0'; END IF; END PROCESS; Q<=TMP; END rtl; -------------------------------------------------------------------------------------------------- --计时电路的VHDL实现如下: --计数器电路模块设计 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY counter IS PORT( COOK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; CLK:IN STD_LOGIC; DATA:IN STD_LOGIC_VECTOR(15 DOWNTO 0); SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --秒个位 SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --秒十位 MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --分个位 MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --分十位 DONE:OUT STD_LOGIC --完成 ); END counter; ARCHITECTURE rtl OF counter IS --定义十进制和六进制计数器电路模块 COMPONENT cnt10 IS PORT( CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; EN:IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输入 Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --输出 CARRY_OUT:OUT STD_LOGIC --状态 ); END COMPONENT cnt10; COMPONENT cnt6 IS PORT( CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; EN:IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC ); END COMPONENT cnt6; SIGNAL CLK0:STD_LOGIC; SIGNAL S0:STD_LOGIC; SIGNAL S1:STD_LOGIC; SIGNAL S2:STD_LOGIC; SIGNAL S3:STD_LOGIC; BEGIN --元件例化 CLK0 <= NOT CLK; U1:cnt10 PORT MAP(CLK0,LOAD,CLR,COOK,DATA(3 DOWNTO 0),SEC0,S0); U2:cnt6 PORT MAP(S0,LOAD,CLR,COOK,DATA(7 DOWNTO 4),SEC1,S1); U3:cnt10 PORT MAP(S1,LOAD,CLR,COOK,DATA(11 DOWNTO 8),MIN0,S2); U4:cnt6 PORT MAP(S2,LOAD,CLR,COOK,DATA(15 DOWNTO 12),MIN1,S3); DONE<=S0 AND S1 AND S2 AND S3; END rtl; -------------------------------------------------------------------------------------------------- --顶层模块的VHDL实现如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY top IS PORT( KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输入4位16进制 RESET:IN STD_LOGIC; --复位键 SET_T:IN STD_LOGIC; --设置时间 START:IN STD_LOGIC; --开始计时 TEST:IN STD_LOGIC; --测试模式 CLK :IN STD_LOGIC; --输入脉冲 COOK:OUT STD_LOGIC; --烹调状态 LED2:OUT STD_LOGIC_VECTOR(1 DOWNTO 0); --LED显示状态 SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END top; ARCHITECTURE rtl OF top IS --定义状态控制电路模块 COMPONENT controllor IS PORT( RESET:IN STD_LOGIC; KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0); SET_T:IN STD_LOGIC; START:IN STD_LOGIC; TEST:IN STD_LOGIC; CLK :IN STD_LOGIC; DONE:IN STD_LOGIC; COOK:OUT STD_LOGIC; LD_TEST:OUT STD_LOGIC; LD_CLK:OUT STD_LOGIC; DATA:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); LED_SET_T:OUT STD_LOGIC; LD_DONE:OUT STD_LOGIC ); END COMPONENT controllor; --定义数据装载电路模块 COMPONENT loader IS PORT( DATAIN:IN STD_LOGIC_VECTOR(15 DOWNTO 0); LD_TEST:IN STD_LOGIC; LD_CLK:IN STD_LOGIC; LD_DONE:IN STD_LOGIC; DATAOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); LOAD:OUT STD_LOGIC); END COMPONENT loader; --定义计时电路模块 COMPONENT counter IS PORT( COOK:IN STD_LOGIC; LOAD,CLR:STD_LOGIC; CLK:IN STD_LOGIC; DATA:IN STD_LOGIC_VECTOR(15 DOWNTO 0); SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DONE:OUT STD_LOGIC ); END COMPONENT counter; SIGNAL COOK_TMP:STD_LOGIC; SIGNAL TEST_TMP:STD_LOGIC; SIGNAL CLK_TMP:STD_LOGIC; SIGNAL DONE_TMP:STD_LOGIC; SIGNAL LOAD_TMP:STD_LOGIC; SIGNAL DONE:STD_LOGIC; SIGNAL DATA_TMP,DATA_TMP1:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN COOK<=COOK_TMP; LED2(0)<=COOK_TMP; --电路模块例化 U1:controllor PORT MAP(RESET,KEY,SET_T,START,TEST,CLK,DONE,COOK_TMP, TEST_TMP,CLK_TMP,DATA_TMP1,LED2(1),DONE_TMP); U2:loader PORT MAP(DATA_TMP1,TEST_TMP,CLK_TMP,DONE_TMP,DATA_TMP, LOAD_TMP); U3:counter PORT MAP(COOK_TMP,LOAD_TMP,RESET,CLK,DATA_TMP,SEC0,SEC1,MIN0, MIN1,DONE); END rtl;
基于FPGA的电子秒表设计 摘 要 简而言之,电子秒表的工作原理就是不断输出连续脉冲给加法计数器,而加法计数 器通过译码器来显示它所记忆的脉冲周期个数。电子秒表是日常生活中比较常见的电子 产品。 本设计秒表的逻辑结构主要由74LS00, 555定时器,RS触发器,74LS90等器件组成 。使用了基本RS触发器作为电子秒表的开关,基本RS触发器属低电平直接触发的触发器 ,有直接置位,复位的功能。整个秒表需有一个 清零/ 启动信号和一个 停止/保持 信号 装置 ,以便秒表能随意停止及启动 , 计数器的输出全都为BCD码输出, 方便 显示译码器连接。 本设计基于简单易行的原则,秒表显示以0.01s为最小单位,设计时,按照设计任务 的次序,将各单元电路逐个进行接线和调试,即分别测试基本RS触发器、时钟发生器及 计数器的逻辑功能,待各单元电路工作正常后,再将有关电路逐级连接起来进行测试…… ,直到测试电子秒表整个电路的功能。最后进行总结.做到经典而没有缺憾的设计结果。 关键字:74LS00 555定时器 RS触发器 BCD码 目 录 摘 要 2 一、 引言 4 (一)设计的背景 4 (二)设计实现的基本功能 5 (三)设计的结构安排 5 二、系统硬件设计 6 (一)总体设计 6 (二)555定时器简简介 10 (三)基本RS触发器 11 (四)功能测试 13 三、 系统软件设计 15 (一) 设计方案 15 (二)分频模块 15 (三)计数模块 17 (四)启停控制模块 18 (五)显示控制模块 19 (六)编译仿真 20 参考文献 23 致 谢 24 1. 引言 1. 设计的背景 秒表计时器是电器制造,工业自动化控制、国防、实验室及科研单位理想的计时仪器 ,他广泛应用于各种继电器、电磁开关、控制器、延时器、定时器等的时间测试。 有关电子秒表的发展历史,大致可以分为三个演变阶段。 1、从大型钟向小型钟演变。2、从小型钟向袋表过度。3、从袋表向腕表发展。 每一阶段的发展都是和当时的技术发明分不开的。 1088年,当时我国宋朝的科学家苏颂和韩公廉等人制造了水运仪象台,它是把浑仪、 浑象和机械计时器组合起来的装置。他以水力作为动力来源具有科学的擒纵机构。 1656年。,荷兰的科学家惠更斯利用伽利略的理论设计了钟摆,第二年,在他的指导 下年轻钟匠S.Coster制造成功了第一个钟摆。这样就形成了以发条为动力、以游丝为调 速机构的小型钟,同时也为制造便于携带的袋表提供了条件。 20世纪初,尤其是第一次世界大战的爆发,袋表袋表已经不能适应作战军人的需要。 许多新的设计和技术也被应用在腕表上成为真正意义上的带在手腕上的计时工具。 现代的电子秒表主要是有三种设计制造工艺 采用8051IP核设计。用FPGA构成一个8051单片应用系统拥有标准8051完全兼容的指 令系统的CPU;256字节内部RAM;4K字节程序ROM; 每一此编译下载后都能根据需要更新ROM中的程序,所以该单片机的实现和使用如同 89C51/52一样方便。 采用芯片EP1C12Q240C8、共阴七段数码管、按键开关、发光二极管设计。EP1C12Q2 40C8是Cyclone器件,Cyclone可以最多支持129个通道的LVDS和RSDS。Cyclone器件的LVD S缓冲器可以支持最高达640Mbps的数据传输速度。与单端的I/O口标准相比,这些内显置 于Cyclone器件内部的LVDS缓冲器保持了信号的完整性,并且有更低的电磁干扰、更好的 电磁兼容性(EMI)及更低的电源功耗。 采用模块化设计,共分为分频模块(msecond)、控制秒模块(second)、控制分钟 模块(minutes)、LED模块(alert)、数码管扫描模块(zhishi)、显示驱动模块(del ed)六个模块。其中LED模块可以去掉,不影响秒表正常运行以下对各个模块一一描述。 电子秒表在生活中也可广泛应用于对运动物体的速度、加速度的测量实验,还可用来 验证牛顿第二定律、机械能守恒等物理实验,同时也适用于对时间测量精度要求较高的场 合.测定短时间间隔的仪表。有机械秒表和电子秒表两类。机械秒表与机械手表相仿,但 具有制动装置,可精确至百分之一秒;电子秒表用微型电池作能源,电子元件测量显示 ,可精确至千分之一秒。广泛应用于科学研究、体育运动及国防等方面在当今非常注重 工作效率的社会环境中,定时器能给我们的工作、生活以及娱乐带来很大的方便,充分 利用定时器,能有效的加强我们的工作效率。 通过本设计的研究,可以掌握用FPGA实现电子秒表的方法,理解FPGA的概念、应用和 编程方法,有利于提高学生应用FPGA进行设计的能力。 (二)设计实现的基本功能 设计的主要内容是设计一个电子秒表。 按下标准键盘的"模式切换键",让秒表
子工程学院综合课程设计(创新项目) 1.R、L、C元件参数到直流电压转换电路设计 设计思路:首先,利用运算放大器设计RLC参数—交流电压转换电路,后接峰值检波电 路和线性放大电路,得到直流电压。激励信号采用正弦波。 2.相位差至直流电压转换电路设计 设计思路:首先,设计一个能够产生0~359o相位差的两路同频信号(可采用RC移相网络 ); 将参考信号和移相后的信号进行相位比较,得到反映相位差的直流信号。 指标自定(信号频率要求不高,建议10kHz一下)。 3.精密V/F转换电路设计 思路:电压/频率转换(V/F转换)具有较好的精度、线性度和积分输入特性,便于远距 传 送模拟信号、光电隔离提高抗干扰性能,在低速高精度数据采集中得到广泛应用。 要求:模拟某传感器输出信号:0~20mV(可通过电位器调节得到),首先采用三运放结 构的仪用放大器(IA,可用三个OP07或单片集成如AD620)将信号放大到4V,再利用 V/F转换器实现电压/频率转换,建议可用LM331,在此基础上可考虑增加一个由低 失调运算放大器(如LM308)组成的反向积分器,可大大改善线性度。 测试V/F转换的线性度,并计算最小二乘法拟合线性度。 4.触发电平可自动调节的频率测量的通道电路设计 思路:用正、负峰值检波电路取出信号的正、负峰值,再由分压电路对正、负峰值的差 值分压得到触发电平。 要求:通常,频率测量的通道电路多采用施密特触发器抑制被测输入频率信号中的干扰 ,但是,当输入信号动态范围较大时,希望触发电平能自动随输入信号幅度而调节 。 5.脉冲宽度测量与显示 思路:用2个双BCD加法计数器(如CD4518或74HC系列的也可),对基准时钟信号的计数 (根据分辨力要求,用100kHz即可),被测脉冲宽度信号作为计数器的闸门(计数 使能)信号。4位数码显示采用CD4511(7段锁存/译码/驱动器)驱动4个数码管。 要求:测量出脉冲宽度(考虑正脉冲宽度),分辨力10us,最大测量脉冲宽度99.99ms。 显示位数4位。 注意:脉冲宽度开始测量时计数器应清零,脉冲宽度结束时计数值要锁存。 6.频率合成的脉冲信号源设计 要求:输出频率1kHz~999kHz(可通过拨动开关设置),分辨力1kHz。 思路:采用高精度基准频率1kHz作为输入信号,分频式锁相环PLL采用CD4046,分频器采 用三位十进制计数器CD4522,计数器输入由三位拨动开关预置。 7. GPS软件接收机的设计与实现 8. WLAN中的协同定位方法 9. 分布式多点光照通风温度控制系统设计 10. 简易电阻、电容测试仪 11. 低频功率放大器 12. 洗衣机控制器,包括洗衣、清洗、脱水三个步骤。 13. 微波炉控制器,在0-1小时内时间任意设定。 14. 单运动站对目标定位跟踪的可行性研究 15. 基于单片机的无线倒车后视系统 16. 基于单片机的数控调频发射器 17. 基于单片机系统的无线遥控器 18. 基于单片机的近视预防报警器 19. 简易无线数据收发器 20. DSL主动匹配电路设计 21. 动态随机考试系统设计 22. C8051F系列MCU实验核心板设计 23. PIC系列MCU实验核心板设计 24. MSP430系列MCU实验核心板设计 25. 无线跟踪器设计 26. 多通信接口转换器设计 27. 智能地址译码器 28. 软件无线电实验系统设计 29. 建立模拟集成电路设计平台: 熟悉UNIX(LINEX)系统及EDA仿真器 30. 压控振荡器(VCO)设计: 学习和掌握VCO的原理。了解输入电压和谐振频率的关系。设计VCO及显示仿真结果 31. 锁相环(PLL)设计: 学习和掌握PLL系统的原理。设计PLL及显示仿真结果 32. Sigma-Delta 模数转换器(ADC)设计: 学习和掌握ADC和Sigma-Delta ADC系统的原理。设计Sigma-Delta ADC及显示仿真结果 33. Sigma-Delta 数模转换器(DAC)设计: 学习和掌握DAC和Sigma-Delta DAC系统的原理。设计Sigma-Delta DAC及显示仿真结果 34. 梳状滤波器的FPGA实现 35. 增益相位不平衡补偿的FPGA实现 36. 低通滤波器的设计、仿真与实现 37. QPSK数字调制及FPGA实现 38. 16QAM数字调制及FPGA实现 39. 发射机与接收机 制作一个调频发射机和调频接收机 基本要求: 发射频率范围:88MHz~108MHz; 发射功率 20mW; 调制信号:300Hz~3400Hz音频信号 在调制信号为1000Hz时,频偏不小于5kHz; 用接收机在5米内能正常接收; 40. 低频网络分析仪 测试频率:DC~10MHz 测试:阻抗、幅频特性、相频特性 4
修数字逻辑与数字电路课程时的一些实验报告 《数字逻辑与数字电路》实验指导 实验1.Verilog HDL输入方式组合电路的设计 多路选择器和三人表决电路的设计 (1) 实验目的:进一步熟悉Quartus II的Verilog HDL文本设计流程,组合电路的设计仿真和硬件测试。 (2) 实验内容1、多路选择器的设计: 根据教材5.1节的流程,利用Quartus II完成2选1多路选择器的文本编辑输入(MUX21.v)和仿真测试等步骤,给出仿真波形。 在实验系统上硬件测试,验证此设计的功能。对于引脚锁定以及硬件下载测试,a和b分别接来自不同的时钟;输出信号接蜂鸣器。最后进行编译、下载和硬件测试实验(通过选择键1,控制s,可使蜂鸣器输出不同音调)。 (4) 实验内容2、三人表决电路的设计: 根据教材5.1节的流程,利用Quartus II完成三人表决电路的文本编辑输入(图5-36)和仿真测试等步骤,给出仿真波形。 在实验系统上硬件测试,验证此设计的功能。对于引脚锁定以及硬件下载测试,ABC[2..0]分别接自键3、键2、键1;CLK接自时钟CLOCK0(256Hz),输出信号X接D1,输出信号Y接蜂鸣器。最后进行编译、下载和硬件测试实验(通过按下键3、键2、键1,控制D1的亮灭)。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 实验2.原理图输入方式全加器设计 (1) 实验目的:熟悉利用Quartus II的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个8位全加器的设计把握文本和原理图输入方式设计的详细流程。 (2) 实验原理:一个8位全加器可以由8个1位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相接。 (3) 实验内容1:按照教材4.6节完成半加器和1位全加器的设计,包括用文本或原理图输入,编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个元件符号入库。 (4) 实验内容2:建立一个更高层次的原理图或文本设计,利用以上获得的1位全加器构成8位全加器,并完成编译、综合、适配、仿真和硬件测试。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 实验3.7段数码显示译码器设计 (1) 实验目的:进一步熟悉Quartus II的Verilog HDL文本设计流程,组合电路的设计仿真和硬件测试。熟悉利用Quartus II的原理图输入方法设计简单组合电路,掌握层次化设计的方法,把握文本和原理图输入方式设计的详细流程。 (2) 实验原理:7段数码显示译码器设计采用case语句对数码管的七个段分别进行赋值0或1,实现数字的显示;使用if-else语句设计模16计数器。 (3) 实验内容1:使用VerilogHDL语言设计一个7段数码显示译码器并进行仿真及下载。 (4) 实验内容2:使用VerilogHDL语言设计一个模16计数器,含计数使能端(en)与异步清零端(clr),当en为高电平时开始计数,为低电平时停止计数,将计数器与7段数码显示译码器使用原理图进行连接,并仿真及下载。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 原理工程图: 实验4.基于LPM宏模块的计数器设计 (1) 实验目的:初步掌握Quartus II基于LPM宏模块的设计流程与方法并由此引出基于LPM模块的许多其他实用数字系统的自动设计技术。 (2) 实验内容: 根据教材175页8.5节的流程,利用Quartus II完成基于LPM宏模块的计数器设计编辑和仿真测试等步骤,给出仿真波形。 在实验系统上硬件测试,验证此设计的功能并进行解说。对于引脚锁定以及硬件下载测试。 (3) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。 实验5.序列检测器状态机设计 (1) 实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计与应用。 (2) 实验原理:序列检测器可用于检测一组或多组由二进制吗组成的脉冲序列信号,当序列检测器连接收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。 (3) 实验内容1:按照教材180页8.7节的流程,利用Quartus II完成序列检测器状态机的设计编辑和仿真测试等步骤,给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。 建议选择电路模式8,用键8(PIO8)控制复位信号CLR;键6(PIO9)控制状态机工作时钟CLK;将8位待检测预置数由键4/键3作为外部输入,待检测串行序列数输入DS接PIO10(左移,最高位在前);指示输出DC接PIO43~PIO40(显示于数码管7), 现态码输出C接PIO47~PIO44(显示于数码管8)。下载后:①按实验板“系统复位”键;②用键2和键1输入2位十六进制待测序列数“11100101”;③按键8复位(平时数码7指示显“0”);④按键6(CLK) 8次,这时若串行输入的8位二进制序列码(显示于数码2/1和发光管D8~D0)与预置码“11100101”相同,则数码7应从原来的0变成1,表示序列检测正确,否则仍为0。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 实验6.数字频率计 (1) 实验目的:设计6位10进制频率计,学习较复杂的数字系统设计方法。 (2) 实验原理:数字频率计由三大部分组成。3个CNT10模块分别是双十进制计数器模块,负责对被测频率信号进行计数;3个74374被用做输出数据的锁存器,锁存输出的数据,即所测频率值通过外接的数码管显示;TF_CTRL模块是此频率计的测频时序控制模块,由它发出ENB, LOCK, CLR三个控制信号,分别控制计数器的计数使能,锁存器的锁存控制,以及计数器的清零。 根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生,即TF_CTRL。 设计要求是:TF_CTRL的计数使能信号ENB能产生一个1秒脉宽的周期信号,并对频率计中的6位十进制计数器CNT10的ENA使能端进行同步控制。当ENB高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOCK的上跳沿将计数器在前1秒钟的计数值锁存进锁存器74374b中,并由外部的7段译码器译出,显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。锁存信号后,必须有一清0信号CLR对计数器进行清零,为下1秒的计数操作作准备。 (3) 实验内容:按照教材181页8.8节的流程,利用Quartus II完成数字频率计的设计编辑和仿真测试等步骤,给出仿真波形。建议选实验电路模式5;6个数码管以10进制形式显示测频输出;待测频率输入F_IN由clock5输入,频率可选32768Hz等;8HZ测频控制信号CLK1HZ可由clock2输入(用跳线选8Hz)。注意,这时6个数码管的测频显示值是10进制的。 (4) 实验内容2:将频率计改为8位10进制频率计,注意此设计电路的计数器必须是8个4位的10进制计数器。此外注意在测频速度上给予优化。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 GW48CP+主系统使用说明 第一节 GW48教学实验系统原理与使用介绍 一、GW48系统使用注意事项 (用户必读!!!) a:闲置不用GW48系统时,必须关闭电源!!! b:在实验中,当选中某种模式后,要按一下右侧的复位键,以使系统进入该结构模式工作。注意此复位键仅对实验系统的监控模块复位,而对目标器件FPGA没有影响,FPGA本身没有复位的概念,上电后即工作,在没有配置前,FPGA的I/O口是随机的,故可以从数码管上看到随机闪动,配置后的I/O口才会有确定的输出电平。 c:换目标芯片时要特别注意,不要插反或插错,也不要带电插拔,确信插对后才能开电源。其它接口都可带电插拔。请特别注意,尽可能不要随意插拔适配板,及实验系统上的其他芯片。 二、GW48系统主板结构与使用方法 以下将详述GW48系列实验系统结构与使用方法,对于这2种型号的不同之处将给予单独指出。该系统的实验电路结构是可控的。即可通过控制接口键,使之改变连接方式以适应不同的实验需要。因而,从物理结构上看,实验板的电路结构是固定的,但其内部的信息流在主控器的控制下,电路结构将发生变化---重配置。这种“多任务重配置”设计方案的目的有3个:1、适应更多的实验与开发项目;2、适应更多的PLD公司的器件;3、适应更多的不同封装的FPGA和CPLD器件。系统板面主要部件及其使用方法说明如下。以下是对GW48系统主板功能块的注释。 (1) “模式选择键”:按动该键能使实验板产生12种不同的实验电路结构。这些结构如第二节的13 张实验电路结构图所示。例如选择了“NO.3”图,须按动系统板上此键,直至数码管“模式指示”数码管显示“3”,于是系统即进入了NO.3 图所示的实验电路结构。 (2) 适配板:这是一块插于主系统板上的目标芯片适配座。对于不同的目标芯片可配不同的适配座。可用的目标芯片包括目前世界上最大的六家FPGA/CPLD厂商几乎所有CPLD、FPGA和所有ispPAC等模拟EDA器件。第七节的表中已列出多种芯片对系统板引脚的对应关系,以利在实验时经常查用。 (3) ByteBlasterMV编程配置口:如果要进行独立电子系统开发、应用系统开发、电子设计竞赛等开发实践活动,首先应该将系统板上的目标芯片适配座拔下(对于Cyclone器件不用拔),用配置的10芯编程线将“ByteBlasterMV”口和独立系统上适配板上的10芯口相接,进行在系统编程(如GWDVP-B板),进行调试测试。“ByteBlasterMV”口能对不同公司,不同封装的CPLD/FPGA进行编程下载,也能对isp单片机89S51等进行编程。编程的目标芯片和引脚连线可参考附图1,从而进行二次开发。 (4)ByteBlasterII编程配置口:该口主要用于对Cyclone系列AS模式专用配置器件EPCS4和EPCS1等编程。 附图1 GW48系统电子设计二次开发信号图 (5) 混合工作电压源:系统不必通过切换即可为CPLD/FPGA目标器件提供5V、3.3V、2.5V、1.8V和1.5V工作电源,此电源位置可参考附图1。 (6)并行下载口:此接口通过下载线与微机的打印机口相连。来自PC机的下载控制信号和CPLD/FPGA的目标码将通过此口,完成对目标芯片的编程下载。计算机的并行口通信模式最好设置成“EPP”模式。 (7)键1~键8 :为实验信号控制键,此8个键受“多任务重配置”电路控制,它在每一张电路图中的功能及其与主系统的连接方式随模式选择键的选定的模式而变,使用中需参照第二节中的电路图。 (8)数码管1~8/发光管D1~D16 :受“多任务重配置”电路控制,它们的连线形式也需参照第二节的电路图。 (9)“时钟频率选择

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛郎恋刘娘,刘娘念牛郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值