1.5.什么叫“综合”?一般“综合”包含哪些过程?答:在电子设计领域中“综合”的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
综合包含的过程:对VHDL或Verilog HDL进行处理分析,并将其转换成电路结构或模块,这时不考虑实际器件实现,即完全与硬件无关,这个过程是一个通用电路原理图形成的过程:第2步,对实际实现目标器件的结构进行优化,并使之满足各种约束条件,优化关键路径,等等。
2.10 使用Quartus II的 Mega Wizard Plug-In Manager宏功能模块中的PLL设计一个能实现图题2.10波形的电路元件(包括一个VHDL文件和一个*.bsf原理图图标)。
其中:inclk0为电路的主频输入端,频率为50MHz;areset为异步置位端,c2和主频inclk0同频率。
c1为主频inclk0的倍频输出信号。
C0为c2的反相信号。
Locked为相位控制信号,也是输出使能控制信号。
( 2014am)3.20 试用VHDL 语言设计一个曼彻斯特编码器。
已知有时钟信号clk_d、时钟的倍频信号clk及时钟的反相信号clk_dn。
串行数据输入为data_s,编码输出为mcode_out,输出使能信号为clk_lock_in,高电平有效(2012am)(2013am)(2014am)提示:曼彻斯特码(Manchester Code)又称为数字双相码或分相码(Split-phase Code)。
它的编码规则是:用分别持续半个码元周期的正(高)、负(低)电平组合表示信码“1”;用分别持续半个码元周期的负(低)、正(高)电平组合表示信码“0”。
图题3.20 用倍频时钟设计Manchester Code图题3.20 用双时钟设计Manchester Code 的仿真结果hsu_manchester_code_vmodule hsu_manchester_code_v ( clk,clk_d,clk_dn,data_s,clk_lock_in,mcode_out); input clk,clk_d,clk_dn,data_s,clk_lock_in;output mcode_out;reg mcode_out;reg temp_mcode_out;reg temp_mcode_out_ddn;always @ ( posedge clk or posedge clk_lock_in )beginif (clk_lock_in==1'b1)if (data_s==1'b1)temp_mcode_out<=clk_d;elsetemp_mcode_out<=1'b0;elsetemp_mcode_out=1'b0;endalways @ ( posedge clk or posedge clk_lock_in )beginif (clk_lock_in==1'b1)if (data_s==1'b0)temp_mcode_out_ddn<=clk_dn;elsetemp_mcode_out_ddn<=1'b0;elsetemp_mcode_out_ddn=1'b0;Endalways @ ( posedge clk or posedge clk_lock_in )beginif (clk_lock_in==1'b1)mcode_out<=temp_mcode_out;temp_mcode_out_ddn;elsemcode_out<=1'b0;endendmodule3.21 试用VHDL 语言设计一个求两个数中最大值的程序,要求用函数调用的方法设计。
其中:data为输入信号,位宽8bit,dataout为最大值输出,位宽8bit。
Clk为时钟信号。
设计一位控制信号set,当set为低电平时,输出data和peak中的最大值。
(2013am) 2014am) 。
实体部分LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.ning_bpac.ALL;ENTITY ning_peakdetect ISPORT(data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);clk,set: IN STD_LOGIC;dataout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ning_peakdetect ;ARCHITECTURE peakdetect_behave OF ning_peakdetect ISSIGNAL peak: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINdataout<=peak;PROCESS(clk)BEGINIF(clk'EVENT AND clk='1') THENIF (set='1' ) THENpeak<=data;ELSEpeak<=max(data , peak);END IF;END IF;END PROCESS;END;函数部分LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE ning_bpac ISFUNCTION max(a: STD_LOGIC_VECTOR;b: STD_LOGIC_VECTOR)RETURN STD_LOGIC_VECTOR;END ning_bpac;PACKAGE BODY ning_bpac ISFUNCTION max(a: STD_LOGIC_VECTOR;b: STD_LOGIC_VECTOR)RETURN STD_LOGIC_VECTOR ISVARIABLE temp: STD_LOGIC_VECTOR(a'RANGE); BEGINIF (a>b) THENtemp:=a;ELSEtemp:=b;END IF;RETURN temp;END max;END ning_bpac;3.22 试用VHDL 语言设计一个8位二进制加计数器。
其中:qout 为8位二进制输出,cout 为进位输出,clr 为同步清零端,当clr为高电平时清零、低电平时工作。
Cipher为8位密码控制输入端,其控制功能如下表所示:(2014am)cipher 功能00001111 加计数11110000 减计数11001100 停止计数11111111 停止计数并且输出BCD码要求:1.设计一个计数分频器,输入频率 clk 为50Mhz ,输出频率 newclk 为1hz。
newclk 为计数器的计数频率。
2.编写一个把二进制转换为整数的函数。
3.当停止计数时,调用上述函数用整数除法把二进制数转换为BCD 码。
(2014am)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Updowncnt8 ISPORT (clk,clr:IN STD_LOGIC;cipher:IN STD_LOGIC_VECTOR(7 DOWNTO 0);cout:OUT STD_LOGIC;q:BUFFER INTEGER RANGE 0 TO 15);END Updowncnt8;ARCHITECTURE one OF Updowncnt8 ISBEGINPROCESS(clk,clr)BEGINIF clk'EVENT AND clk='1' THEN IF clr ='0' THENCASE cipher ISWHEN "00001111"=>IF q=15 THEN q<=0;cout<='0';ELSIF q=14 THEN q<=q+1;cout<='1';ELSE q<=q+1;END IF;WHEN "11110000"=>IF q=0 THEN q<=15;cout<='0';ELSIF q=1 THEN q<=q-1;cout<='1';ELSE q<=q-1;END IF;WHEN "11001100"=>NULL;WHEN "11111111"=>NULL;WHEN OTHERS =>NULL;END CASE;ELSIF clr ='1' THENq<=0;END IF;END IF;END PROCESS;END one;4.14 8线-3线优先编码器CD4532功能表如表4.1a所示,试用Verilog HDL语言实现该8线-3线优先编码器。
(2011am)(2011gam)(2012am) (2013am)(2014am)module coder_8(y,a);input[7:0] a;output[2:0]y;reg[2:0] y;always @(a)beginif(~a[7]) y='b111;else if(~a[6]) y='b110;else if(~a[5]) y='b101;else if(~a[4]) y='b100;else if(~a[3]) y='b011;else if(~a[2]) y='b010;else if(~a[1]) y='b001;else y='b000;endendmodule表4.1a 8线-3线优先编码器CD4532功能表(P109.例题4.6)4.15 把下列VHDL程序改写成Verilog HDL语言,并且用Quartus Ⅱ通过编译。
(2014am) LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY hsu_count6_updown ISPORT(CLK,RST,ENA:IN STD_LOGIC;OUTY:OUT STD_LOGIC_VECTOR(3DOWNTO 0);COUT:OUT STD_LOGIC;cipher: IN STD_LOGIC_VECTOR(7 DOWNTO 0));END hsu_count6_updown;ARCHITECTURE behave_cnt6 OF hsu_count6_updown ISSIGNAL CQI: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";SIGNAL flag1_2: STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL cipher_temp: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINcipher_temp<=cipher;P_COUNT10_VT: PROCESS(CLK,RST,ENA)BEGINIF RST='1' THEN CQI<="0000";ELSIF CLK 'EVENT AND CLK='1' THENIF ENA='1' THENif (flag1_2="00") thenIF CQI<5 THENCQI<=CQI+ 1;ELSECQI<="0000";END IF;elsif (flag1_2="01") thenIF CQI>0 THENCQI<=CQI- 1;ELSECQI<="0101";END IF;end if;END IF;END IF;OUTY<=CQI;IF (flag1_2="00") THENCOUT<= NOT( CQI(2) AND CQI(0));ELSIF (flag1_2="01") THENCOUT<= CQI(3) OR CQI(2) OR CQI(1) OR CQI(0); END IF;END PROCESS P_COUNT10_VT;p1: Process(clk,cipher_temp)BEGINIF (clk 'EVENT AND clk='1') THENIF (cipher_temp="00001111") THENflag1_2<="00";ELSIF (cipher_temp="11110000") THENflag1_2<="01";ELSIF (cipher_temp="11001100") THENflag1_2<="10";END IF;END IF;END PROCESS p1;P2_stop: Process(clk,flag1_2,CQI)BEGINIF (clk 'EVENT AND clk='1') THENIF ( flag1_2="10") THENCQI<=CQI;END IF;END IF;END PROCESS p2_stop;END behave_cnt6;。