16位除8位有符号数的VHDL设计

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
Entity Divider is
port( clk: in std_logic;
--reset: in std_logic;
start: in std_logic;
word1: in std_logic_vector(15 downto 0);--被除数
word2: in std_logic_vector(7 downto 0);--除数
data_out: out std_logic_vector(15 downto 0)--商
);
end Divider;
Architecture Divider_arc of Divider is
type states is(S_Idle,S_Adivr,S_Adivn,S_div);
signal state,next_state:states;
signal dividend:std_logic_vector(16 downto 0);
signal comparison:std_logic_vector(8 downto 0);
signal divisor:std_logic_vector(7 downto 0);
signal load_words,shift_divisor,shift_dividend,subtract:std_logic;
signal num_shift_divisor,num_shift_dividend:integer range 0 to 16;
signal quotient:std_logic_vector(15 downto 0);
begin
process(state,dividend,divisor)
begin
case state is
when S_Adivr => if divisor(7)='0' then
comparison<='1'&(not(divisor(6 downto 0)&'0'))
+"000000001"+dividend(16 downto 8);
else comparison<='1'&(not divisor)
+"000000001"+dividend(16 downto 8);
end if;
when others => comparison<='1'&(not divisor)
+"000000001"+dividend(16 downto 8);
end case;
end process;
process(clk,start)
begin
if start='1' then state<=S_idle;
elsif clk'event and clk='1' then state<=next_state;
end if;
end process;
process(state,word1,word2,divisor,comparison,num_shift_divisor,num_shift_dividend)
begin Load_words<='0';Shift_dividend<='0';Shift_divisor<='0';Subtract<='0';
case state is
when S_Idle=>--case start is
--when '0'=>next_state<=S_idle;
--when '1'=>
if word2="00000000" then next_state<=S_idle;
elsif word1="0000000000000000"
then next_state<=S_idle;
else next_state<=S_Adivr;Load_words<='1';
end if;
--end case;
when S_Adivr=> case divisor(7) is
when '1'=>next_state<=S_div;
when '0'=>if comparison(8)='0' then next_state<=S_adivr;shift_divisor<='1';
elsif comparison(8)='1' then next_state<=S_Adivn;
end if;
end case;
when S_Adivn=> if num_shift_dividend=num_shift_divisor+8 then
if comparison(8)='0' then
next_state<=S_idle;Subtract<='1';
else next_state<=S_idle;
end if;
elsif comparison(8)='1' then next_state<=S_Adivn;Shift_dividend<='1';
else next_state<=S_div;
end if;
when S_div=> if num_shift_dividend=num_shift_divisor+8 then
if comparison(8)='1' then next_state<=S_div;Shift_dividend<='1';
else next_state<=S_div;Subtract<='1';
end if;
elsif comparison(8)='1' then next_state<=S_Adivn;
else next_state<=S_div;Subtract<='1';
end if;
when others=>next_state<=S_idle;
end case;
end process;
process(clk,start)
begin
if start='1' then
divisor<="00000000";dividend<="00000000000000000";quotient<="0000000000000000";
num_shift_dividend<=0;num_shift_divisor<=0;
elsif clk'event and clk='1' then
if Load_words='1' then
num_shift_dividend<=0;num_shift_divisor<=0;
dividend<=('0'&word1);divisor<=word2;quotient<="0000000000000000";
elsif shift_divisor='1' then
divisor<=divisor(6 downto 0)&'0';num_shift_divisor<=num_shift_divisor+1;
elsif shift_dividend='1' then
dividend <=dividend(15 downto 0)&'0';quotient <= quotient(14 downto 0)&'0';
num_shift_dividend<=num_shift_dividend+1;
elsif subtract='1' then
dividend(16 downto 8)<=comparison;
quotient(0)<='1';
end if;
end if;
end process;
data_out<=quotient;
end Divider_arc;。

合集下载

基于VHDL的8位除法器的实现

基于VHDL的8位除法器的实现

基于VHDL的8位除法器的实现The Design of 8 Division With VHDL摘要:介绍了利用VHDL实现八位除法,采用层次化设计,给出了实现除法的子模块程序。

使用Altera公司的MAX+PLUSII10.2开发软件进行功能仿真并给出仿真波形。

关键词:二进制除法 VHDL MAX+PLUS2Abstract:The design of division(8/8) by hierarchy technique is proposed. Schematic documents and submodule program with VHDL language are also given. At the end of the article, using MAX+PLUS2, the flow char is given and the simulation result is attached.Keywords: division VHDL MAX+PLUS2引言除法是数值计算和数据分析中最常用的运算之一,许多高级运算如平方根、指数、三角函数等都与其有关。

在FPGA中,有加、减、乘、除的算法指令,但除法中除数必须是2的幂,因此无法实现除数为任意数的除法。

本文用VHDL编写了除法运算,可实现任意八位数的除法。

除法器的设计本文所采用的除法原理是:对于八位无符号被除数A,先对A转换成高八位是0低八位是A的数C,在时钟脉冲的每个上升沿C向左移动一位,最后一位补零,同时判断C的高八位是否大于除数B,如是则C的高八位减去B,同时进行移位操作,将C的第二位置1。

否则,继续移位操作。

经过八个周期后,所得到的C的高八位为余数,第八位为商。

从图(1)可清楚地看出此除法器的工作原理。

此除法器主要包括比较器、减法器、移位器、控制器等模块。

1、比较模块设计中所用的八位比较器是由两个四位比较器级联而成的。

VHDL十六进制

VHDL十六进制

VHDL 设计一个十六进制计数器一、实验目的1.进一步了解VHDL设计方法2.熟悉数码管和LED的显示二、实验所用仪器及元器件1、计算机2、Quartus II 7.2 (32-Bit)软件3、EP2C5实验箱三、实验内容(1)、设计一个十六进制计数器,用一个数码管、8个彩灯循环显示计数状态。

(2)、有清零信号控制,按下后从零开始。

四、设计思路与过程根据实验要求,需要实现在拨码开关或者按键的控制下实现十六进制计数器。

首先,确定输入输出变量:输入:拨码开关a:清零;时钟clk::提供有效时钟沿;输出SEL-LED:8维向量b:连接8个发光二极管。

输出SEL-DATA :8维向量b:连接8个发光二极管。

其次,确定电路工作状态因为要实现计数十六进制计数器,所以首先要实现在时钟控制下实现计数;还要考虑到清零信号;再次,实现对计术状态的表示;也就是让计数状态用数码管和LED显示出来。

具体程序如下:五、VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count16 ISPORT(CLK5 :IN STD_LOGIC;RST :IN STD_LOGIC;SEG_SEL :OUT STD_LOGIC_VECTOR(2 DOWNTO 0);SEG_DA :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);LED :OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END count16;ARCHITECTURE BEHA VE OF count16 ISSIGNAL SHIFT_CNT,TEMP :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CNT_V ALUE :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK5)BEGINIF RST='1' THEN TEMP <="0000";ELSIF CLK5'EVENT AND CLK5='1' THENIF TEMP="1111" THENTEMP <="0000";ELSETEMP<=TEMP+1;END IF;END IF;END PROCESS;SHIFT_CNT<=TEMP;SEG_SEL<="000";PROCESS(SHIFT_CNT)BEGINCASE SHIFT_CNT ISWHEN "0000" => SEG_DA<=x"3F";LED<="00000001";WHEN "0001" => SEG_DA<=x"06";LED<="00000010";WHEN "0010" => SEG_DA<=x"5B";LED<="00000100";WHEN "0011" => SEG_DA<=x"4F";LED<="00001000";WHEN "0100" => SEG_DA<=x"66";LED<="00010000";WHEN "0101" => SEG_DA<=x"6D";LED<="00100000";WHEN "0110" => SEG_DA<=x"7D";LED<="01000000";WHEN "0111" => SEG_DA<=x"07";LED<="10000000";WHEN "1000" => SEG_DA<=x"7F";LED<="00000001";WHEN "1001" => SEG_DA<=x"6F";LED<="00000010";WHEN "1010" => SEG_DA<=x"77";LED<="00000100";WHEN "1011" => SEG_DA<=x"7C";LED<="00001000";WHEN "1100" => SEG_DA<=x"39";LED<="00010000";WHEN "1101" => SEG_DA<=x"5E";LED<="00100000";WHEN "1110" => SEG_DA<=x"79";LED<="01000000";WHEN "1111" => SEG_DA<=x"71";LED<="10000000";END CASE;END PROCESS;END BEHA VE;六、实验 QuarterII原理图:七、仿真波形八、故障及问题分析本次实验整体比较顺利,但仍旧出现了一个个问题:开始时引脚分配有问题,没有找到与EP2C5有关的引脚,后来找到了。

基于FPGA的16阶FIR数字滤波器的设计

基于FPGA的16阶FIR数字滤波器的设计

基于FPGA的16阶FIR数字滤波器的设计作者:王香张莉莉来源:《电子世界》2013年第16期【摘要】本文是利用Altera提供的DSP Builder开发工具从Simulink模型自动生成VHDL 代码的一种FPGA设计方法来实现一个16阶FIR数字低通滤波器,设计出的滤波器用于线性调制的相干解调中。

通过对设计的电路进行验证和仿真,结果表明电路工作正确可靠,能满足设计要求。

【关键词】FPGA;DSP Builder;FIR数字低通滤波器;相干解调1.引言信号的数字滤波在图像处理、语音识别、模式识别等数字信号处理中都占有要的地位。

与模拟滤波器相比,数字滤波器可以满足滤波器幅度和相位特性的严格要求,可以克服模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。

根据数字滤波器冲激响应函数的时域特性,可将数字滤波器分为无限长冲激响应(IIR)滤波和有限长冲激响应(FIR)滤波器两种。

由于FIR系统只有零点、系统稳定,便于实FFT算法、运算速度快、线性相位的特性和设计更为灵活等突出优点而在工程实际中得广泛应用。

在复杂运算中,FPGA的处理速度表现了很好的优势,而且FPGA开发周期短且编程灵活,易于反复擦写,算法实现不受DSP之类固件性能的限制。

本文研究了基于FPGA的16阶数字低通滤波器硬件电路的实现方法。

设计出的16阶FIR 数字低通滤波器用于线性调制中的相干解调(也叫同步解调)来实现对原始信号的恢复。

2.本设计利用的基本原理及设计指标的选择2.1 相干解调的基本原理在线性调制中,设调制信号m(t)=sinω1t,载波为cosωct,则已调信号:Sm(t)=m(t)cosωct将已调信号乘上一个同频同相的载波,得:χ(t)=Sm(t)cosωct=m(t)(cosωct)2 =0.5m(t)+0.5m(t)cos2ωct由上式可知,用一个低通滤波器可以将第一项与第二项分离,从而恢复出原始的调制信号,这种方法称为同步解调或相干解调。

VHDL八位数码扫描显示电路设计

VHDL八位数码扫描显示电路设计

八位数码管显示电路VHDL语言实现八位数码管显示电路,很多初学者对进程(process)的概念很模糊,可以查一下先关资料,里面的参数是如何规定的,进程如何使用。

libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityscan_led isport(clk:std_logic;--时钟seg:outstd_logic_vector(7 downto 0);--段显示控制(abcdefg)scan:outstd_logic_vector(7 downto 0));--数码管地址选择控制end;architecture one of scan_led issignal cnt8:integer range 0 to 7;signaldata:integer range 0 to 15;begin----------扫描数码管地址计数器process(clk)beginifclk'event and clk='1' thencnt8<=cnt8+1;end if;end process;-----------数码管地址扫描process(cnt8)begincase cnt8 iswhen 0=>scan<="00000001";data<=1;when 1=>scan<="00000010";data<=2;when 2=>scan<="00000100";data<=4;when 3=>scan<="00001000";data<=5;when 4=>scan<="00010000";data<=7;when 5=>scan<="00100000";data<=9;when 6=>scan<="01000000";data<=13;when 7=>scan<="10000000";data<=15;when others=>null;end case;end process;-----------7段译码process(data)begincase data is ---abcdefg when 0=>seg<="11111100"; when 1=>seg<="01100000"; when 2=>seg<="11011010"; when 3=>seg<="11110010"; when 4=>seg<="01100110"; when 5=>seg<="10110110"; when 6=>seg<="10111110"; when 7=>seg<="11100000"; when 8=>seg<="11111110"; when 9=>seg<="11110110"; when 10=>seg<="11101110"; when 11=>seg<="00111110"; when 12=>seg<="10011100"; when 13=>seg<="01111010"; when 14=>seg<="10011110"; when 15=>seg<="10001110"; when others=>null;end case;end process;end;。

VHDL八位数码管频率计课程设计

VHDL八位数码管频率计课程设计

5、时钟源。

五、功能模块和信号仿真图以及源程序(1) 系统时钟分频及控制的功能模块图及其源程序图2 功能模块图作用:将试验箱上的50MHz的晶振分频,输出CLOCK为数码管提供1kHz的动态扫描频率。

CNT_EN输出为0.05s的信号,对频率计中的32位十进制计数器CNT10的ENA使能端进行同步控制,当TSTEN高电平时允许计数,低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒的计数值锁存进锁存器REG32B中,并由外部的十进制7段数码管显示计数值。

设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号后,必须有一个清零信号RST_CNT对计数器进行清零,为下一秒的计数操作做准备。

该模块的信号仿真图如下:图3 仿真波形图源程序如下:--分频library ieee;use ieee.std_logic_1164.all;entity fdivwangzheng isport(clk0:in std_logic; --输入系统时钟clk1:out std_logic; --输出1hz时钟信号clk2:out std_logic); --输出显示扫描时钟信号end fdivwangzheng;architecture a of fdivwangzheng isbeginp1:process(clk0)variable cnt:integer range 0 to 49999999; --分频系数为24999999variable ff:std_logic;beginif clk0'event and clk0='1' thenif cnt<49999999 thencnt:=cnt+1;elsecnt:=0;ff:=not ff; --反向end if;end if;clk1<=ff;end process p1;p2:process(clk0)variable cnn:integer range 0 to 999; --分频系数为499variable dd:std_logic;beginif clk0'event and clk0='1' thenif cnn<999 thencnn:=cnn+1;elsecnn:=0;dd:=not dd; --反向end if;end if;clk2<=dd;end process p2;end a;--测频控制器(testctl.vhd)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTLwanzheng ISPORT ( CLKK : IN STD_LOGIC; -- 1HzCNT_EN,RST_CNT,LOAD : OUT STD_LOGIC);END TESTCTLwanzheng;ARCHITECTURE behav OF TESTCTLwanzheng ISSIGNAL DIV2CLK : STD_LOGIC;BEGINPROCESS( CLKK )BEGINIF CLKK'EVENT AND CLKK = '1' THEN DIV2CLK <= NOT DIV2CLK;END IF;END PROCESS;PROCESS (CLKK, DIV2CLK)BEGINIF CLKK='0' AND Div2CLK='0' THEN RST_CNT <= '1';ELSE RST_CNT <= '0'; END IF;END PROCESS;LOAD <= NOT DIV2CLK ; CNT_EN <= DIV2CLK;END behav;(2) 十进制计数器的功能模块图及其源程序图4 功能模块图作用:当使能端为高电平,清零端为低电平时,实现十进制计数功能。

基于VHDL的8位除法器的实现

基于VHDL的8位除法器的实现

基于VHDL的8位除法器的实现The Design of 8 Division With VHDL摘要:介绍了利用VHDL实现八位除法,采用层次化设计,给出了实现除法的子模块程序。

使用Altera公司的MAX+PLUSII10.2开发软件进行功能仿真并给出仿真波形。

关键词:二进制除法 VHDL MAX+PLUS2Abstract:The design of division(8/8) by hierarchy technique is proposed. Schematic documents and submodule program with VHDL language are also given. At the end of the article, using MAX+PLUS2, the flow char is given and the simulation result is attached.Keywords: division VHDL MAX+PLUS2引言除法是数值计算和数据分析中最常用的运算之一,许多高级运算如平方根、指数、三角函数等都与其有关。

在FPGA中,有加、减、乘、除的算法指令,但除法中除数必须是2的幂,因此无法实现除数为任意数的除法。

本文用VHDL编写了除法运算,可实现任意八位数的除法。

除法器的设计本文所采用的除法原理是:对于八位无符号被除数A,先对A转换成高八位是0低八位是A的数C,在时钟脉冲的每个上升沿C向左移动一位,最后一位补零,同时判断C的高八位是否大于除数B,如是则C的高八位减去B,同时进行移位操作,将C的第二位置1。

否则,继续移位操作。

经过八个周期后,所得到的C的高八位为余数,第八位为商。

从图(1)可清楚地看出此除法器的工作原理。

此除法器主要包括比较器、减法器、移位器、控制器等模块。

1、比较模块设计中所用的八位比较器是由两个四位比较器级联而成的。

VHDL 16

VHDL 16*16点阵本实验主要完成汉字字符在LED 上的显示,16*16 扫描LED 点阵的工作原理与8 位扫描数码管类似,只是显示的方式与结果不一样。

本实验的示例程序依次显示的是“湖南工程学院”,要求每隔一秒换下一个字显示。

源程序(带注释)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dzh is --建立实体dzh port( clk:in std_logic;r,c:out std_logic_vector(15 downto 0)); --两个输出信号end;architecture two of dzh is --建立结构体two type states is(st0,st1,st2,st3,st4,st5); --定义六个状态signal cs,ns:states:=st0;signal count:integer range 0 to 999:=0;begina1:process(clk)variable s:std_logic_vector(3 downto 0):="0000";beginif clk'event and clk='1' thens:=s+1;if cs=st0 thencase s is --“湖”字的显示when "0000" =>r<=not"0000000000000001";c<=not"0111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1011111011100000";when "0010" =>r<=not"0000000000000100";c<=not"1100111011101110";when "0011" =>r<=not"0000000000001000";c<=not"1111100000101110";when "0100" =>r<=not"0000000000010000";c<=not"1111111011101110";when "0101" =>r<=not"0000000000100000";c<=not"1111111011100000";when "0110" =>r<=not"0000000001000000";c<=not"0011100000101110";when "0111" =>r<=not"0000000010000000";c<=not"1100101110101110";when "1000" =>r<=not"0000000100000000";c<=not"1111101110100000";when "1001" =>r<=not"0000001000000000";c<=not"1111101110101110";when "1010" =>r<=not"0000010000000000";c<=not"1111101110101110";when "1011" =>r<=not"0000100000000000";c<=not"1110101110101110";when "1100" =>r<=not"0001000000000000";c<=not"1101100000101110";when "1101" =>r<=not"0010000000000000";c<=not"1011111111101110";when "1110" =>r<=not"0100000000000000";c<=not"0111111111011100";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st1 thencase s is --“南”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111110111111";when "0010" =>r<=not"0000000000000100";c<=not"1111111101111111";when "0011" =>r<=not"0000000000001000";c<=not"1100000000000111";when "0100" =>r<=not"0000000000010000";c<=not"1111111011111111";when "0101" =>r<=not"0000000000100000";c<=not"1111110111111111";when "0110" =>r<=not"0000000001000000";c<=not"1100000000000111";when "0111" =>r<=not"0000000010000000";c<=not"1101101110110111";when "1000" =>r<=not"0000000100000000";c<=not"1101110101110111";when "1001" =>r<=not"0000001000000000";c<=not"1101100000110111";when "1010" =>r<=not"0000010000000000";c<=not"1101111011110111";when "1011" =>r<=not"0000100000000000";c<=not"1101000000010111";when "1100" =>r<=not"0001000000000000";c<=not"1101111011110111";when "1101" =>r<=not"0010000000000000";c<=not"1101111011100111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st2 thencase s is --“工”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111111111111";when "0010" =>r<=not"0000000000000100";c<=not"1111111111111111";when "0011" =>r<=not"0000000000001000";c<=not"1100000000000111";when "0100" =>r<=not"0000000000010000";c<=not"1111111011111111";when "0101" =>r<=not"0000000000100000";c<=not"1111111011111111";when "0110" =>r<=not"0000000001000000";c<=not"1111111011111111";when "0111" =>r<=not"0000000010000000";c<=not"1111111011111111";when "1000" =>r<=not"0000000100000000";c<=not"1111111011111111";when "1001" =>r<=not"0000001000000000";c<=not"1111111011111111";when "1010" =>r<=not"0000010000000000";c<=not"1111111011111111";when "1011" =>r<=not"0000100000000000";c<=not"1111111011111111";when "1100" =>r<=not"0001000000000000";c<=not"1100000000000111";when "1101" =>r<=not"0010000000000000";c<=not"1111111111111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";end case;elsif cs=st3 thencase s is --“程”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111111111111111";when "0010" =>r<=not"0000000000000100";c<=not"1111110110000011";when "0011" =>r<=not"0000000000001000";c<=not"1100001110111011";when "0100" =>r<=not"0000000000010000";c<=not"1111011110000011";when "0101" =>r<=not"0000000000100000";c<=not"1111011111111111";when "0110" =>r<=not"0000000001000000";c<=not"1000000100000001";when "0111" =>r<=not"0000000010000000";c<=not"1110001111101111";when "1000" =>r<=not"0000000100000000";c<=not"1101010111101111";when "1001" =>r<=not"0000001000000000";c<=not"1101011010000011";when "1011" =>r<=not"0000100000000000";c<=not"1111011111101111";when "1100" =>r<=not"0001000000000000";c<=not"1111011111101111";when "1101" =>r<=not"0010000000000000";c<=not"1111011100000001";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st4 thencase s is --“学”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111111111111";when "0001" =>r<=not"0000000000000010";c<=not"1111011011110111";when "0010" =>r<=not"0000000000000100";c<=not"1111101101101111";when "0011" =>r<=not"0000000000001000";c<=not"1111111111111111";when "0100" =>r<=not"0000000000010000";c<=not"1110000000000011";when "0101" =>r<=not"0000000000100000";c<=not"1110111111111011";when "0110" =>r<=not"0000000001000000";c<=not"1101110000010111";when "0111" =>r<=not"0000000010000000";c<=not"1111111111011111";when "1000" =>r<=not"0000000100000000";c<=not"1111111100111111";when "1001" =>r<=not"0000001000000000";c<=not"1111111101111111";when "1010" =>r<=not"0000010000000000";c<=not"1111100000001111";when "1011" =>r<=not"0000100000000000";c<=not"1111111101111111";when "1100" =>r<=not"0001000000000000";c<=not"1111111101111111";when "1101" =>r<=not"0010000000000000";c<=not"1111111001111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;elsif cs=st5 thencase s is --“院”字的显示when "0000" =>r<=not"0000000000000001";c<=not"1111111110111111";when "0010" =>r<=not"0000000000000100";c<=not"1011010000000001";when "0011" =>r<=not"0000000000001000";c<=not"1011010111111101";when "0100" =>r<=not"0000000000010000";c<=not"1010101111111011";when "0101" =>r<=not"0000000000100000";c<=not"1001111100001111";when "0110" =>r<=not"0000000001000000";c<=not"1010011111111111";when "0111" =>r<=not"0000000010000000";c<=not"1011010000000011";when "1000" =>r<=not"0000000100000000";c<=not"1011011101101111";when "1001" =>r<=not"0000001000000000";c<=not"1000111101101111";when "1010" =>r<=not"0000010000000000";c<=not"1011111101101111";when "1011" =>r<=not"0000100000000000";c<=not"1011111011101101";when "1100" =>r<=not"0001000000000000";c<=not"1011110111100001";when "1101" =>r<=not"0010000000000000";c<=not"1011111111111111";when "1110" =>r<=not"0100000000000000";c<=not"1111111111111111";when "1111" =>r<=not"1000000000000000";c<=not"1111111111111111";when others =>null;end case;else null;end if;end if;end process a1;a2:process(clk) --下一状态的转换beginif clk'event and clk='1' thenif count<999 thencount<=count+1;else count<=0;case cs iswhen st0=>ns<=st1;when st1=>ns<=st2;when st2=>ns<=st3;when st3=>ns<=st4;when st4=>ns<=st5;when st5=>ns<=st0;when others=>ns<=st0;end case;end if;end if;end process a2;a3:process(clk) --当前状态的转换beginif clk'event and clk='1' thencs<=ns;end if;end process a3;end architecture;。

vhdl语言的除法用法 -回复

vhdl语言的除法用法-回复问题:VHDL语言的除法用法。

引言:VHDL(VHSIC Hardware Description Language)是一种用于描述和设计数字电路的硬件描述语言。

它允许工程师使用基于文本的编程语言来描述硬件系统的行为和结构。

VHDL提供了丰富的语法和功能,可以用于实现各种电路设计中的数学运算,包括除法运算。

在本文中,我们将详细介绍VHDL语言中除法的用法,并提供一步一步的指导。

一、VHDL除法运算的语法:在VHDL中,进行除法运算的语法是通过使用除法运算符“/”来实现的。

一般的除法运算形式为“被除数/ 除数= 商”,这是VHDL中执行除法运算的基础形式。

二、VHDL除法运算的数据类型:在VHDL中,除法运算可以在不同的数据类型之间进行。

常见的数据类型包括整型(integer)、浮点型(real)等。

三、VHDL除法运算的实例:为了更好地理解VHDL中除法运算的用法,我们来看一个简单的实例。

假设我们要计算两个32位无符号整数的除法运算。

首先,我们需要声明两个32位无符号整数类型的输入信号A和B,以及一个32位无符号整数类型的输出信号Q(商):signal A, B : unsigned(31 downto 0);signal Q : unsigned(31 downto 0);然后,我们可以通过使用VHDL的除法运算符“/”来进行除法运算:Q <= A / B;最后,我们需要在VHDL程序中引入相关的包(libraries):library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;四、VHDL除法运算的注意事项:在进行VHDL除法运算时,我们需要注意以下几个要点。

1. 被除数和除数的类型必须匹配,即它们必须是相同的数据类型。

如果不匹配,我们需要进行类型转换操作。

2. 在进行整数类型的除法运算时,需要使用整数类型的除法运算符“/”。

8位十六进制频率计的设计

实验二利用VHDL实现8位十六进制频率计一、实验目的1)掌握更复杂的原理层次化设计和数字系统设计方法;2)完成8位16进制频率计的设计。

二、实验内容在Quartus II上利用VHDL设计出一个8位的十六进制的频率计,分别设计出频率计的各个模块。

三、实验仪器1)计算机及操作系统;2)QuartusII软件。

四、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉冲宽度为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号并为下一测频计数周期做准备的计数器清0信号。

这3个信号可以由一个测频控制信号发生器产生,即TESTCTL。

TESTCTL的计数是能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA是能端进行同步控制。

当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进个锁存器REG4B 中,并由外部的7段译码器译出,显示计数值。

设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。

锁存信号后,必须有一清0信号RST_CNT对计数器进行清零,为下1秒的计数操作作准备。

数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包含外电路的信号整形电路、脉冲发生器、译码驱动电路和显示电路。

工作原理:系统正常工作时,脉冲信号发生器输入1Hz的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。

测量信号时,将被测信号通过信号整形电路,产生同频率的矩形波,输入计数器作为时钟。

当计数闸门信号高电平有效时,计数器开始计数,并将计数结果送入锁存器中。

设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

最后将锁存的数值由外部的七段译码器译码并在数码管上显示。

8路数据选择器、16位奇偶检验器的设计.

课程设计报告(理工类)课程名称: EDA技术专业班级:电子科学与技术102 学生学号: 050210109 学生姓名:江杰所属院部:物电学院指导教师:顾涵20 12 ——20 13 学年第 1 学期设计项目名称:8位数据选择器与16位奇偶校验器设计同组学生姓名:张海军、贺旌、蒋宁洲实验地点:力行楼203 设计成绩:批改教师:批改时间:一、设计目的和要求1.课程设计目的本实验课程的目的,旨在通过上机实验自己进行EDA设计,使学生加深理解EDA技术的基本方法,帮助和培养学生建立利用原理图和硬件描述语言进行电路设计的基本方法和利用EDA工具软件(MAX+plusⅡ)设计简单数字电子系统的能力,为以后从事有关数字电子系统方面的设计和研究开发工作打下基础。

2.课程设计的基本要求1、通过课程设计使学生能熟练掌握一种EDA软件(MAXPLUS2)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。

2、通过课程设计使学生能利用EDA软件(MAXPLUS2)进行至少一个电子技术综合问题的设计(内容可由老师指定或自由选择),设计输入可采用图形输入法或AHDL硬件描述语言输入法。

3、通过课程设计使学生初步具有分析、寻找和排除电子电路中常见故障的能力。

4、通过课程设计使学生能独立写出严谨的、有理论根据的、实事求是的、文理通顺的字迹端正的课程设计报告。

3.课程设计类型EDA技术VHDL程序设计二、仪器和设备计算机,MAX+plusⅡ软件三、设计过程1.设计内容和要求a).设计一个八选一数据选择器,同时每一个输入端口又由3个二进制位组成,输出端口是从前八个端口选择一个由3个二进制位组成的端口。

b).设计一个16位奇偶校验器,对输入的信号进行统计奇数或者偶数的数量。

将其奇偶校验的结果输出,若为奇数个 1 输出为高电平;若为偶数个1输出为低电平2.设计方法和开发步骤a).方法:查阅相关资料,找到对于一个四选一数据选择器和8位奇偶校验器的介绍,运用类比的方法写出设计所需要的程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档