Verilog VHDL 曼彻斯特编码器
- 格式:doc
- 大小:250.50 KB
- 文档页数:9
Manchester编码器的VHDL设计
谭必思
【期刊名称】《中南民族大学学报(自然科学版)》
【年(卷),期】2002(021)003
【摘要】指出了Manchester波形具有无直流分量、宏观纠错力强、定时信号提取容易等优点,提出了采用Verilog HDL设计实现的Manchester编码器,这种设计是用软件设计技术来设计硬件系统,具有很好的灵活性、实用性和可操作性.
【总页数】3页(P52-54)
【作者】谭必思
【作者单位】中南民族大学外语系电教室
【正文语种】中文
【中图分类】TN911.21
【相关文献】
1.基于VHDL语言的多功能车辆总线编码器设计与分析 [J], 江文丹;董昱;薛红岩;陈小伟
2.基于FPGA的IRIG-B标准DC code编码器VHDL设计 [J], 王丽秋
3.基于VHDL的非系统前馈卷积码编码器设计 [J], 蔡烁;曹伟;王新
4.Manchester编码器的FPGA设计与实现 [J], 陈新坤;周东;余敬东
5.基于VHDL的HDB3编码器的设计与实现 [J], 弓云峰
因版权原因,仅展示原文概要,查看原文内容请购买。
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 语言设计一个求两个数中最大值的程序,要求用函数调用的方法设计。
曼彻斯特编译码器的FPGA设计与实现一.曼切斯特编译码器设计方法的一般步骤:1)编码过程:QuartusⅡ文本输入设计方法的一般步骤2)译码过程:QuartusⅡ文本输入设计方法的一般步骤3) 编译码过程: QuartusⅡ原理图设计方法的一般步骤(一起实现)二.曼切斯特编译码器设计1)编码过程简单的设计步骤:运用QuartusⅡ文本输入设计方法的一般步骤(a)创建设计工程(b)设计输入(c)项目编译(d)项目防真验证曼切斯特编码方法简单,只需要将1编为10,0编为01,其中1和10的持续时间相同,也就是说编好的码字是原来数据码字频率的2倍。
编码器设计时,VHDL源程序具体如下:LIBRARY IEEE; /*库说明语句*/USE IEEE.STD_LOGIC_1164.ALL; /*程序包说明语句,声明USE IEEE.STD_LOGIC_ARITH.ALL; 要引用IEEE库中的USE IEEE.STD_LOGIC_UNSIGNED.ALL; 这三个程序包中的所有项目*/ENTITY MCST1 IS /*定义一个实体MCST1,clk ,clr,d为输入PORT(clk,clr,d:IN STD_LOGIC; 引脚, 为STD_LOGIC型, q1为输出引q1:OUT STD_LOGIC); 脚, 为STD_LOGIC型*/END MCST1;ARCHITECTURE divcnt OF MCST1 IS /*根据MCST1定义一个结构体名为divcnt*/ BEGINPROCESS(clk,clr) /*当clk, clr改变时,执行下面的进程*/BEGINIF(clr='1')THEN /*如果clr='1'*/q1<='0'; /* q1清0*/ELSEq1<=NOT(clk XOR d); /* clk与d的同或送q1*/END IF;END PROCESS;END divcnt;原理:当clr为1时,q1为0,则当clr为1时,把clk与d的同或送q1,若d在一个周期内为高电平时,所得的波形为clk波形。
//---------曼切斯特编码------------`timescale 1ns/1psmodule match( fifo_rd, //the enable single of superior fifo readfifo_out, //the out data of superior fifofifo_out_vaild, // the effective single of the out datafifo_empty, // the empty single of superior fifomach_out, //machester datai_clk_2, // double of hdlc clki_rst_n,clk);input i_rst_n;input fifo_out;input fifo_out_vaild;input fifo_empty;input i_clk_2;input clk;output fifo_rd;output mach_out;reg [5:0]out_count;reg [5:0]rd_count;reg fifo_rd;reg mach_out;reg [5:0]out_reg;reg [5:0]so_on;reg one;reg zero;reg temp;parameter rd_fifo_count=4'b1010;parameter mach_out_count=6'b010100;//20parameter rest=10;//-------控制fifo读---------------always @(posedge clk or negedge i_rst_n)beginif(!i_rst_n)fifo_rd<=0;else if(!fifo_empty && rd_count<rd_fifo_count && rd_count>0)fifo_rd<=1;else if(!fifo_empty && rd_count==0 && out_count==0)fifo_rd<=1;else if(rd_count==rd_fifo_count)fifo_rd<=0;elsefifo_rd<=0;end//----------fifo输出数据计?-----------always @(posedge clk or negedge i_rst_n)beginif(!i_rst_n)rd_count<=0;else if(fifo_rd && rd_count<rd_fifo_count)rd_count<=rd_count+1;elserd_count<=0;end//-----------manch数据输出-------------always @(posedge i_clk_2 or negedge i_rst_n )beginif(!i_rst_n)beginout_reg<=6'b111000;endelse if(fifo_out_vaild && out_count==0 )out_reg<=6'b111000;else if(out_count>0 && out_count<mach_out_count+8 ||out_count==mach_out_count+8)out_reg<={out_reg[4:0],temp};end//-------------控制输出mach------------always @(posedge i_clk_2 or negedge i_rst_n )beginif(!i_rst_n)begintemp<=0;zero<=0;one<=0;endelse if(fifo_out_vaild && fifo_out && zero==0)begintemp<=1;zero<=1;one<=0;endelse if(zero && fifo_out_vaild && fifo_out)begintemp<=0;zero<=0;one<=0;endelse if(fifo_out_vaild && !fifo_out && one==0)begintemp<=0;zero<=0;one<=1;endelse if(one && fifo_out_vaild && !fifo_out)begintemp<=1;one<=0;zero<=0;endelsebegintemp<=0;one<=0;zero<=0;endend//---------mach输出计数器--------------always @(posedge i_clk_2 or negedge i_rst_n)beginif(!i_rst_n)out_count<=0;else if(out_count==mach_out_count+8)out_count<=0;else if (fifo_out_vaild==1 && out_count==0)out_count<=out_count+1;else if(out_count>0 && out_count<mach_out_count+8)out_count<=out_count+1;endalways @(posedge i_clk_2 or negedge i_rst_n)beginif(!i_rst_n)mach_out<=1;elsemach_out<=out_reg[5];end endmodule。
基于FPGA的曼彻斯特码功能实现技术茅飞;朱昊;朱兴华;朱志勇【摘要】随着曼彻斯特码的应用场合不断扩展,对曼彻斯特编解码的研究与应用也在不断深入和扩展,基于CYCLONE Ⅱ系列FPGA芯片,利用VHDL硬件描述语言和Quartus Ⅱ 9.0开发环境,完成了曼彻斯特编解码模块的设计.在编解码模块的复位单元中使用了异步复位、同步释放的双缓冲电路,降低了异步复位发生亚稳态的概率和减少了同步复位的资源消耗.经过数字仿真波形分析,验证了设计方法的可行性和正确性.【期刊名称】《机电产品开发与创新》【年(卷),期】2011(024)006【总页数】3页(P148-150)【关键词】曼彻斯特码;现场可编程门阵列;编解码模块【作者】茅飞;朱昊;朱兴华;朱志勇【作者单位】南京康尼电子科技有限公司,江苏南京210013;南京工程学院先进数控技术江苏省高校重点建设实验室,江苏南京211167;常州大学机械工程学院,江苏常州213016;南京康尼电子科技有限公司,江苏南京210013【正文语种】中文【中图分类】TN910 引言曼彻斯特 (Manchester)码又称裂相码、双向码,是信道编码的一种码型,已广泛应用在数控测井、安全系统、环境控制系统和车辆总线等领域。
对曼彻斯特码应用的研究也逐渐深入和扩展,如孙枫叶等人研究了曼彻斯特编码在RFID(Radio Frequency Identification,射频识别系统)电子标签中的应用[1],陈志颖研究了曼彻斯特解码在列车控制中心数据传输中的应用[2],张淑玲等人研究了曼彻斯特解码在测井数据传输中的应用[3]等。
目前常用的曼彻斯特编解码器是由美国英特锡尔(Intersil)公司生产的HD6408和HD6409集成芯片,但其最高传输速率只有1MB/s,且需要辅助电路实现串并转换和并串转换功能,无形中影响了工作效率和使用成本。
鉴于此,有学者研究了高速单片机实现曼彻斯特编解码功能的应用[4],然而一直被功能可维护性、可移植性和系统可升级等问题困扰,随着半导体技术的快速发展和生产工艺水平的不断提高,FPGA(Field Programmable Gate Array,现场可编程门阵列)[7]和 CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)[5,6]实现曼彻斯特编解码功能的应用芯片凭借其在性能和密度方面的提高和具有性能高、密度高、电压低、功耗低、可靠性高等优点脱颖而出,本文介绍了基于FPGA的曼彻斯特编解码功能的实现方法和技术。
基于FPGA的类曼彻斯特编码发送模块设计摘要本文基于类曼彻斯特码,采用VHDL编程,设计和仿真了串行数据传输过程中编码发送模块的功能。
类曼彻斯特码采用数据中嵌入时钟信号的设计思想,是一种利用自同步法保持位同步的线路码型,在高速串行通信过程中采用这种编码方式可以降低系统功耗,同时具有很强的抗干扰能力。
0 引言类曼彻斯特码是一种利用自同步法保持位同步的线路码型,它用上升沿来表示一个码元的开始,然后连续两个时钟信号的高电平表示“1”,对应编码数据“0100”,反之连续两个时钟的低电平表示“0”,对应编码数据”0111”。
经类曼彻斯特编码后,无论是数据“1”还是数据“0”,在开始的时候都有一个上升沿,包含了时钟信息,正是具有这一特点,类曼彻斯特编码发送功能的设计实现解决了串行数据传输的同步时钟问题。
1硬件设计在硬件设计时采用LVDS差分电路,LVDS是一种低摆幅的差分信号技术,它使得信号能够在差分平衡电缆上以几百Mbps的速率传输,其低压幅和低电流的驱动输出完全达到了低噪声和低功耗的要求。
本设计中,FPGA传出的串行数据通过差分电路的转换,形成差分形式的数据,向外传输,设计电路如图1所示。
图1 发送模块该电路临近输出端串接了10Ω的电阻,可以防止差分线对短路,缺点在于420mV的驱动电压已接近数据手册中给出的V od最大值454mV。
同时设计中还需要考虑信号反射问题,这种现象的产生会导致噪声类型的转变,使其从原来的共模信号转变为差模信号,从而降低数据传输的准确性。
为了避免这一问题,我们在设计中应做到在信号值不同时输出阻抗保持不变,同时,输出阻抗的下限只能稍小于传输线特性阻抗,而它的上限必须略大于传输线的特性阻抗。
2 软件设计类曼彻斯特编码可以分为三步进行。
第一步,检测编码周期是否开始并发送开始信号;第二步,对十五位数据进行类曼彻斯特编码;第三步,采用偶校验方式生成校验位,完成编码周期。
具体编程时可以分为数据定义、数据转换及校验和数据编码及发送三大模块。
工具软件实训报告项目名称:曼彻斯特编解码器指导老师:系科:专业:姓名:学号:目录:一:实训要求 (3)二:实训原理 (3)三:实训思路 (4)四:实训步骤 (4)五:原理图、仿真结果图以及结论分析 (5)1.曼彻斯特编解码器(实现16bit数据的编解码) (5)1.1曼彻斯特编解码器电路原理图: (5)1.2模块详解 (6)1.3仿真图以及分析 (10)六:个人总结 (11)一:实训要求(1)通过学习原理图输入设计的方法掌握使用工具软件Quartus Ⅱ设计小型数字电路;(2)查阅文献,了解曼彻斯特编解码器的基本原理,并提出在Quartus Ⅱ软件环境下用VHDL进行仿真的方案。
(3)完成设计对编码器的要求:能够对输入的16bit数据进行曼彻斯特编码,输入有时钟、使能、16bit并行数据、写信号等;输出有编码结束和曼彻斯特编码信号(都为1位信号)等。
(4)完成设计对解码器要求:能够把输入的串行曼彻斯特码解码成原先的并行数据,输入有时钟、曼彻斯特码输入(1bit)、使能信号等,输出有提取的同步时钟信号、解码完成(1bit),并行数据(16bit)等。
二:实训原理曼彻斯特编码,也叫做相位编码(PE),是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个同步位流的时钟和数据。
它的每一个数据比特都是由至少一次电压转换的形式所表示的。
在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作为时钟信号,又作为数据信号。
按照曼彻斯特码在IEEE 802.4(令牌总线)以及IEEE 802.3 (以太网)中的规定,本次实训将从高电平到低电平的跳变表示“0”,从低电平到高电平的跳变表示“1”。
三:实训思路以下为曼彻斯特编解码器的实现框图:有上图可知,此次的曼彻斯特编解码电路包括三个部分:信号产生部分、编码电路部分和解码电路部分。
其中,信号产生部分用来产生一个循环的16位二进制数据编码作为普通的信号输入;编码部分则将输入的信号编码为曼彻斯特码,然后输出显示;解码部分负责将获得的曼彻斯特码解码成普通的二进制数据编码。
基于FPGA技术的曼彻斯特编码器设计付林;任志平;刘承杰【摘要】曼彻斯特码是一种性能优良的数字基带信号传输码,具有消除直流成分,隐含时钟等特性,使得他在石油勘探测井中有着广泛的应用.从曼彻斯特码的帧结构出发,在阐明曼彻斯特码基本工作原理的基础上,应用FPGA技术,利用硬件描述语言VHDL设计完成曼彻斯特编码器,所设计的系统包含使能、复位、同步字的产生以及奇校验等功能,所编写的VHDL源程序经Altera公司的软件Max+PlusⅡ进行调试、优化及仿真,仿真结果与理论分析完全吻合.【期刊名称】《现代电子技术》【年(卷),期】2007(030)017【总页数】3页(P55-56,59)【关键词】VHDL;FPGA;曼彻斯特码;编码器【作者】付林;任志平;刘承杰【作者单位】中山职业技术学院,广东,中山,528404;西安石油大学,电子工程学院,陕西,西安,710065;中国石油技术开发公司,北京,100009【正文语种】中文【中图分类】TP312曼彻斯特码又称数字双相码,是一种时钟自同步的编码技术,广泛应用于串行数据的传输。
与其他的编码相比,曼彻斯特码可以消除直流成分,具有时钟恢复和抗干扰性能力强的特点,更适合于在传输性能较差的信道中进行信息的传输。
曼彻斯特码简明有效但时序比较复杂,特别在编码器接口的设计上需要大量的逻辑电路。
FPGA技术的出现大大缓解了这一问题,由于FPGA具有集成度高、开发周期短、开发成本低,且结构灵活、性能稳定、成品无需测试和可实时在线校验的特点,所以目前越来越多的科技人员利用FPGA技术来进行电子电路的设计,设计过程中仅需要构思出系统电路图,通过FPGA开发系统来自动实现其设计功能。
本文正是利用FPGA这一特性将FPGA技术应用到曼彻斯特编码器的设计中,获得了很好的效果。
1 曼彻斯特编码器的工作原理1.1 曼彻斯特码的原理曼彻斯特码的编码是利用码元的中间时刻电平的跳变来表示二进制信息,一般规定位元中间的上跳变表示“1”,下跳变表示“0”。
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;。