vhdl 二进制转整数
- 格式:docx
- 大小:36.81 KB
- 文档页数:2
EDA技术与应用实验报告实验名称:格雷码、二进制转换及译码电路姓名:陈丹学号:2班级:电信(2)班时间:南京理工大学紫金学院电光系一、实验目的1)学习用VHDL代码描述组合逻辑电路的方法。
2) 掌握when….else….,generate和case并行语句的使用。
二、实验原理1)学习VHDL的when….else….,generate和case并行语句。
2)利用when….else….并行语句描述4位二进制码/格雷码转换电路。
3)利用generate并行语句描述n位格雷码/二进制码转换电路。
4)利用case并行语句实现译码电路。
5)利用实验箱验证所设计的电路的正确性,要求将输入输出的数据用数码管显示。
三、实验内容1、二进制转换为格雷码4位二进制格雷码转换的真值表如图所示:建立工程,输入代码先建立工程,工程命名为“btog”,顶层文件名为“btog”。
选择“file→new”,在弹出的窗口中选择“VHDL File”建立“VHDL”文件。
在新建的VHDL文件中输入二进制格雷码转换的VHDL代码,将文件保存。
二进制转换为格雷码的代码:编译仿真对当前文件进行编译,编译通过以后建立仿真波形,保存为“”.为波形文件添加节点,将“end time”设置为100μs ,将输入输出编组,并为输入信号赋值,其中“start value”为“0000”,“count every”设置为5μs.其波形如下:仿真结果2、generate语句实现格雷码转换为二进制对于n位二进制转换为格雷码的码转换电路,转换表达式如下:Bn=GnBi=Gi⊕B(i+1)建立工程,输入代码先建立工程,工程命名为“gtob”,顶层文件名为“g_to_b2”。
选择“file→new”,在弹出的窗口中选择“VHDL File”建立“VHDL”文件。
在新建的VHDL文件中输入格雷码二进制转换的VHDL代码,将文件保存。
转换代码:编译仿真对当前文件进行编译,编译通过以后建立仿真波形,保存为“”.为波形文件添加节点,将“end time”设置为100μs ,将输入输出编组,并为输入信号赋值,其中“start value”为“0000”,“count every”设置为5μs.其波形如下:3、case语句实现译码电路代码描述:仿真波形:4、管脚配置利用实验箱的模式6来验证设计电路的正确性。
在二进制的整数转换中,如(100110101)B=1×28+0×27+0×26+1×25+1×24+0×23+1×22+0×21+1×20在整个转换过程中,2的幂从0~8;而如果是小数,如(1101.1011)B=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3+1×2-4=8+4+0+1+1/2+0+1/23+1/24=13+0.5+0.125+0.0625=13.6875在小数点后面的数,2的幂从-1~-N,这就是它们之间的关系。
关于小数的十进制转换成二进制:把十进制小数转换成二进制小数所采用的规则是“乘以2取整数”。
方法是用2乘以十进制纯小数,将其结果的整数部分去掉;再用2乘余下的纯小数部分,再去掉其结果的整数部分;如此继续下去,直到余下的纯小数为0或满足所要求的精度为止。
最后将每次得到的整数部分(0或1)按先后顺序从左到右排列,即得到所对应的二进制小数。
0.6875*2=1.375(取1)(1.375-1)*2=0.75(取0)0.75*2=1.5(取1)(1.5-1)*2=1(取1)1-1=0(到这就结束了)因此,十进制小数0.6875转换成二进制小数为0.1011。
注意:有些十进制小数不一定能完全准确地转换成二进制小数。
在这种情况下,可以根据精度要求只转换到小数点后某一位为止。
先求整数部分625/2=312 (1)312/2=156 0156/2=78 078/2=39 039/2=19 (1)19/2=9 (1)9/2=4 (1)4/2=2 02/2=1 01/2=0 (1)除2取余,余数倒着书写,即(625)10=(1001110001)2三进制则除以三,八进制则除以八再看小数0.625*2=1.25.....取10.25*2=0.5.....取00.5*2=1.0....取1将整数部分从上往下取,即(0.625)10=(0.101)2整数小数拼起则得(1001110001.101)2各种进制以此类推提问人的追问 2009-09-10 15:46那如何把二进制的小数转化为十进制?回答人的补充 2009-09-10 15:48本来用WORD写了个公式整成图片,没想到上传后会压缩成200*200,变形得严重,没办法,只好用文字说明一下了。
1.B2G_converter1)Screenshot of iSim simulation results:note: from the beginning point at 1,000ns, input(i5binary) changes every other 50nsa)i5binary input from 0 to 6b)i5binary input from 7 to 13c)i5binary input from 14 to 20d)i5binary input from 21 to 27e)i5binary input from 28 to 312)VHDL for Binary-to-Gray-Code converter:------------------------------------------------------------------------------------ Company:-- Engineer:---- Create Date: 13:02:37 09/15/2015-- Design Name:-- Module Name: b2g_converter - Behavioral-- Project Name:-- Target Devices:-- Tool versions:-- Description:---- Dependencies:---- Revision:-- Revision 0.01 - File Created-- Additional Comments:------------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--use IEEE.NUMERIC_STD.ALL;-- Uncomment the following library declaration if instantiating-- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity b2g_converter isPort ( i5Binary : in STD_LOGIC_VECTOR (4 downto 0);o5GrayCode : out STD_LOGIC_VECTOR (4 downto 0));end b2g_converter;architecture Behavioral of b2g_converter issignal gbuffer: std_logic_vector (4 downto 0);begino5GrayCode<=gbuffer;gbuffer(4)<=i5Binary(4);label1:for i in 3 downto 0 generategbuffer(i)<= i5Binary(i+1) xor i5Binary(i);end generate;end Behavioral;2.G2B_converter1)Gray-code-to-Binary conversionFrom the combinational logic described for gray-code-to-binary conversion, we obtain:Thus, for a n-bit graycode number g, g=g(n-1)g(n-2)…g(2)g(1)g(0), the corresponding n-bit binary number b, b=b(n-1)b(n-2)…b(2)b(1)b(0) is computed using the following description:b(n-1)=g(n-1) for the MSB, andb(i)= g(i) b(i+1) for bits in position 0 to n-22)Screenshot of iSim simulation results:note: from the beginning point at 1,000ns, input(i5graycode) changes every other 50nsa)i5graycode input from 0 to 6b)i5graycode input from 7 to 13c)i5graycode input from 14 to 20d)i5graycode input from 21 to 27e)i5graycode input from 28 to 313)VHDL for Gray-Code-to-Binary converter:------------------------------------------------------------------------------------ Company:-- Engineer:---- Create Date: 15:20:03 09/15/2015-- Design Name:-- Module Name: g2b_converter - Behavioral-- Project Name:-- Target Devices:-- Tool versions:-- Description:---- Dependencies:---- Revision:-- Revision 0.01 - File Created-- Additional Comments:------------------------------------------------------------------------------------ library IEEE;use IEEE.STD_LOGIC_1164.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--use IEEE.NUMERIC_STD.ALL;-- Uncomment the following library declaration if instantiating-- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity g2b_converter isPort ( i5GrayCode : in STD_LOGIC_VECTOR (4 downto 0);o5Binary : out STD_LOGIC_VECTOR (4 downto 0)); end g2b_converter;architecture Behavioral of g2b_converter issignal bbuffer: std_logic_vector (4 downto 0);begino5Binary <= bbuffer;bbuffer(4)<= i5GrayCode(4);label1:for i in 3 downto 0 generatebbuffer(i)<= bbuffer(i+1) xor i5GrayCode(i); end generate;end Behavioral;。
河南科技学院机电学院VHDL课程设计报告题目:八位数码管显示专业班级:电气工程及其自动化102姓名:周迎接学号:20100344214指导教师:付广春完成日期:2012年12月27 日目录1 引言 (2)2 总体设计方案 (2)2.1 输入引脚数目的计算 (3)2.2 二进制转为十进制部分程序设计 (3)2.3 数码管显示部分程序设计 (4)3 仿真显示 (5)3.1 显示3仿真图 (5)3.2显示96的仿真图 (5)4 心得体会 (6)参考文献 (6)附录1 (7)摘要随着当今社会电子技术的快速发展,单凭借硬件已不再能满足广大人民的需求,这时候软件就显示除了他们突出的优点。
与其他编程语言相比,VHDL语言以其超强的硬件描述能力,良好的可读性和可移植性,以及其良好的用户自定义性受到了广大用户的青睐。
VHDL语言在最近几年的发展及其迅猛,由此可以看出其用途已经变的越来越广泛。
一个VHDL程序由5个部分组成,包括实体(ENTITY)、结构体(architecture)、配置(coxnfiguration)、包(package)和库(library)。
实体和结构体两大部分组成程序设计的最基本单元。
图2.2表示的是一个VHDL 程序的基本组成。
配置是用来从库中选择所需要的单元来组成该系统设计的不同规格的不同版本,VHDL和Verilog HDL已成为IEEE的标准语言,使用IEEE提供的版本。
包是存放每个设计模块都能共享的设计类型、常数和子程序的集合体。
库是用来存放已编译的实体、结构体、包和配置。
在设计中可以使用ASIC芯片制造商提供的库,也可以使用由用户生成的IP库。
今天我所要设计的是基于VHDL语言的8位数码管显示电路,其要实现的功能是把输入的二进制数转换为对应的十进制数,并通过数码管显示出来。
其过程大致可以分为通过程序将输入的二进制数先转换为对应的十进制数,然后再把对应的十进制数与数码管的管脚对应起来,使其显示在数码管上。
二进制与数值转换二进制与数值转换二进制是计算机中最基本的数字系统,由两个数字0和1组成。
因为它只有两个状态,所以它被广泛应用于数字电子技术和计算机领域。
但是二进制对于人类来说并不方便,因为我们使用的是十进制数字系统。
将二进制转换为十进制和将十进制转换为二进制是很常见的需求,下面将介绍如何进行这些转换。
一、将二进制转换为十进制1.将二进制数按权展开二进制数是按位赋权值展开的,权值是2的幂。
例如,二进制数10011的权值为:1×2^4 + 0×2^3 + 0×2^2 + 1×2^1 + 1×2^0 = 16 + 2 + 1 =19所以,二进制数10011的十进制表示为19。
2.使用加法像算长加法一样,将二进制数位倒过来,将每个数字与其相应的权相乘,然后将它们相加,即可得到十进制值。
例如,将二进制数11101转换为十进制:1×2^4 + 1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 = 16 + 8 + 4 + 0 + 1 = 29所以,二进制数11101的十进制表示为29。
二、将十进制转换为二进制将十进制数转换为二进制数需要用到短除法。
我们用2除以十进制数,得到商和余数。
再用商继续除以2,得到新的商和余数。
重复这个过程直到商为0为止。
最后,我们将余数从下往上排列在一起,这就是十进制数的二进制表示。
例如,将十进制数42转换为二进制:42 ÷ 2 = 21 余021 ÷ 2 = 10 余110 ÷ 2 = 5 余05 ÷ 2 = 2 余12 ÷ 2 = 1 余01 ÷2 = 0 余1所以,十进制数42的二进制表示为101010。
综上所述,二进制与十进制之间的转换是非常简单的。
这种转换对于计算机科学家、程序员和电子工程师来说是非常重要的。
标准数据类型1,整数(INTEGER)范围:-2147483547—21474836462,实数(REAL)范围:-1.0E38—1.0E38 (综合器不支持)书写时一定要有小数・3,位(BIT)在数字系统中,信号经常用位的值表示,位的值用带单引号的T和O来表示标准数据类型4,位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组位数据“010101“5,布尔量(BOOLEAN)只有“真“和“假“两个状态,可以进行关系运算6,字符(CHARACTER)字符量通常用单引号括起来,对大小写敏感明确说明1是字符时:CHARACTER'(T)标准数据类型7,字符串(STRING)字符串是双引号括起来的由字母,数字或@,%,$组成的一串字符•区分大小写•,laksdklakld M“仙0101010”8,时间(TIME)时间的单位:fs,ps,ns,ms,sec,min,hr 例:10 ns整数数值和单位之间应有空格标准数据类型9,错误等级(SEVERITY LEVEL)在VHDL仿真器屮,错误等级用来表示系统的状态,它共有4种:NOTE(注意)WARNING(警告)ERROR(错误)FAILURE(失败)标准数据类型10,自然数(NATURAL)正整数(POSITIVE)自然数是整数的一个子类型,包括0和正整数;正整数也是整数的一个子类型只能是正整数数据除定义类型外,有时还需要定义约束范围・INTEGER RANGE 100 DOWNTO 0 BIT_ VECTOR (3 DOWNTO 0)REAL RANGE 2.0 TO 30.0IEEE定义的逻辑位与矢量在IEEE的程序包std_logic_1164屮定义了两个非常重要的数据类型:1 ,stdjogic取值:0,1,Z,X,W,L,Hz:高阻X:不定w:弱信号不定L:弱信号o H:弱信号1 2,StdJogic_vector注意1,在使用,,std_logic H和”std」ogic_vector H时,在程序中必须声明库及程序包说明语句,即LIBRARY ieee和std_logic_1164.ALL这两句在程序屮必不可少・2,std.logic有多个取值,与BIT不同,在编程时应特别注意,需要考虑全所有情况・用户自定义的数据类型1,枚举类型格式:TYPE数据类型名IS(元素,元素厂);TYPE STD_LOGIC IS (,U';X,,,0,,,1,;乙TYPE week IS (Sun,Mon,Tue,wed,Thu,Fri,Sat);TYPE color IS (red,green,yellow,blue)TYPE lift_state IS(stoponl ,doorpeen,doorclose, doorwaitl, doorwait2, doorwait3, doorwait4,doorwait5, up,down,stop)枚举类型的声明TYPE color IS (red,green,yellow,blue);VARIABLE A:COLOR; SIGNAL B:COLOR;A:=RED; B<=YELLOW;TYPE lever IS SIGNAL V:lever;V<=1*;用户自定义的数据类型2,整数(INTEGER)格式:TYPE数据类型名IS数据类型定义约束范围例TYPE digit IS INTEGER RANGE OTO 9 VARIABLE A:DIGIT;A:=5;A:=28;用户自定义的数据类型3,实数(REAL)格式:TYPE数据类型名IS数据类型定义约朿范围TYPE current IS REAL RANGE -1E4 TO 1E4 VARIABLE A:CURRENT;A:=1E3;A:=1E10;用户自定义的数据类型4,数组(ARRAY)格式:TYPE数据类型名IS ARRAY范围OF原数据类型名例:TYPE word IS ARRAY (1 TO 8) OF STD.LOGIC;TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC;数组常在总线,ROM 和RAM 中使用.用户自定义的数据类型5,记录(RECODE)类型将不同的数据类型放在一块,就是记录类型数据格式:TYPE记录类型名ISRECORD元素名:数据类型名;元素名:数据类型名;END RECORD[记录类型名];记录(RECODE)类型例:TYPE bank IS RECORD addrO:STD_LOGIC_VECTOR(7 DOWNTO 0); addrl: STD_LOGIC_VECTOR(7 DOWNTO 0); rO: INTEGER; END RECORD;记录(RECODE)类型例:CONSTANT LEN:integer:=100;TYPE array logic IS ARRAY (99 downto 0)OF STD_LOGIC_VECTOR(7 DOWNTO 0) TYPE table IS RECORD a: array logic;b: STD_LOGIC_VECTOR(7 DOWNTO 0);c: integer RANGE 0 to len ;END RECORD;数据类型的转换数据类型转换函数有VHDL语言的包提供例如:STD_LOGIC_1164,STD_LOGIC_ ARITH STD_LOGIC_UNSIGNED 等等函数说明1、STD_LOGIC_1164 包TO_STDLOGIC_VECTOR(A) TO_BITVECTOR(A) TO_LOGIC(A) TO_BIT(A)由BIT_VECTOR 转换成STD_LOGIC_VECTOR 由STD_LOGIC_VECTOR 转换成BIT.VECTOR 由BIT 转换成STD.LOGIC 由STD.LOGIC 转换成BIT2、STD_LOGIC_ARITH 包CONV_STD_LOGIC_VECTOR(A,位长)CONVJNTEGER(A)由INTEGER,UNSIGNED 和SIGNED 转换成STD_LOGIC_VECTOR由UNSIGNED 和SIGNED 转换成INTEGER3、STD_LOGIC_UNSIGNED 包CONVJNTEGER(A)STD_LOGIC_VECTOR 转换成INTEGERVHDL属性VHDL没有一般程序语言屮的那些运算类标准函数,取而代Z的是多种能反映和影响硬件行为的属性•属性在描述时序电路的VHDL设计文件中几乎处处可见,如检测上升沿,下降沿,知道前一次发生的事件. VHDL属性属性指的是关于实体,结构体,类型及信号的一些特征•有的属性对综合(设计)非常有用・VHDL的属性可分为数值类属性,函数类属性,范围类属性,信号类属性,类型类属性•其引用的一般形式为:对象'属性・数值类属性数值类属性用于返回数组,块或一般数据的有关值,如边界,数组长度等信息•对一般的数据有4种数值类属性:对象类型的左边界,右边界,上边界,下边界,对应的关键字是:LEFT,RIGHT,HIGH,LOW.数组在加一个长度属性LENGTH.数值类属性sdown:IN std_logic_vector(8 DOWNTO 0); sup:IN std_logic-vector(0 to 8);这两个信号的各属性值如下:sdownleft=8; sdown'right=0; sdown'low=0; sdownhigh=8;sdowrflength=9; sup'left=O; sup'right=8; sup'low=0; sup'high=8; sup'length=9;数值类属性TYPE bit32 IS ARRAY (63 DOWNTO 32) OF BITVARIABLE: left_ra ng e,right_ra ng e,up_ra ng e,low_ra ng e,le n: INTEGER;BEGIN left-range:=bit32'LEFT; --return 63 right-range:=bit32'RIGHT; --return 32 up-range:=bit32 HIGH; --return 63 low-range:=bit32'LOW; -return 32 len:=bit32'LENGTH; --return 32 函数类属性信号属性函数属于函数类属性,用来返回有关信号行为功能的信息•共有5种信号属性函数分别是:'EVENT (事件):1 ACTIVE (活跃);1 LAST.EVENT (最近一次事件到现在经过多少时间);'LAST_ACTIVE (最近一次活跃到现在经过多少时间);’LAST_V ALUE (信号变化前的取值是什么)EVENTEVENT:它的值为布尔型,取值为TRUE或FALSE;如果刚好有事件发生在该属性所附着的信号上(即信号有变化),取值为TRUE.利用此属性可决定时钟边沿是否有效,即时钟是否发生・EVENTSIGNAL elk: IN stdjogic; elk 'EVENT AND clk=r clk=1* AND elk 'EVENT elk 'EVENT AND elk" clk='O' AND elk 'EVENT rising_edge (elk) falling_edge (elk) EVENT 和ACTIVEEVENT要求信号值发生变化;1到0,0到1ACTIVE信号值的任何变化,1到1,1到0,0到1,0到0;所有的事件都是活跃,但并非所有的活跃都是事件范围类属性RANGE属性,其生成一个限制性数据对彖的范虱例SIGNAL data_bus:std_logic_vector (15DOWNTO 0) ; data_bus *RANGE=15 downto 0用VHDL语言设计分频电路,把1KHZ的时钟分至约1HZ左右的时钟LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider ISPORT(Clkin :IN Std_Logic;Clkout :OUT Std_Logic);END;ARCHITECTURE Devider OF FreDevider IS CONSTANT N:lnteger:=499; signalcounter :lnteger range 0 to N;signal Clk :Std_Logic;BEGINPROCESS(Clkin )beginIF rising_edge(Clkin) THENIF Counter=N then courtter<=0; Clk<二not clk;else counter<=counter+1;end if;end if;end process; clkout<=clk;end;。
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 语言设计一个求两个数中最大值的程序,要求用函数调用的方法设计。
《创新实验》——可编程逻辑设计基础实验题目:二进制与十进制之间的相互转换指导教师:周克峰小组成员:摘要十进制-二进制转换的编码器是将十进制数0、1、2、3、4、5、6、7、8、9等十个信号编成二进制代码的电路。
它的输入是代表0~9这个10个数符的状态信号,有效信号为1,输出是响应的BCD码,其特点是任何时刻只允许输入一个有效信号。
二进制-十进制转换的编码器是十-二进制转换的逆过程,它的功能是将输入的一位BCD码译成10个高、低电平输出信号。
当输入一个BCD码时,就会在它所表示的十进制数的对应输出端产生一个低电平有效信号。
在本次的实验中,主要使用开发软件ISE和芯片Xilinx Spartan-II来实现二进制与十进制之间的相互转换。
目录一、概述 (5)1、PLD/FPGA 结构与原理 (5)1)PLD/FPGA原理2)查找表(L ook-Up-Ta ble)的原理与结构2、开发软件与芯片 (5)1)开发软件2)芯片介绍二、算法设计原理 (6)1、十进制-二进制的转换2、二(BCD)-十进制的转换三、工程开发流程 (7)(一)工程开发流程 (7)1、设计输入2、综合3、实现4、验证5、下载(二)实际运用过程 (9)1、设计输入 (9)1)建立源文件2)输入原理图3)行为仿真2、设计实现 (15)1)时序仿真2)产生报告并修改设计3、配置或编程 (17)1)编程器件2)验证电路3)下载四、实验总结 (20)五、实验心得 (21)六、参考文献 (21)一、概述1、PLD/FPGA 结构与原理1)PLD/FPGA原理:PLD是可编程逻辑器件(Programable Logic Device)的简称,FPGA是现场可编程门阵列(Field Programable Gate Array)的简称,两者的功能基本相同,只是实现原理略有不同,所以我们有时可以忽略这两者的区别,统称为可编程逻辑器件或PLD/FPGA。
二进制数转为整数的方法在计算机技术中,二进制数是一个非常重要的概念,它是一种只包含0和1的数字系统。
在这个数字系统中,每一位只有两个可能的状态:0或1。
在计算机中,二进制数是一种用来表示电子电路中开或关的状态的方式。
那么,当我们需要将二进制数转换为整数时应该怎么做呢?一、什么是二进制数?二进制数是一种只由0和1组成的数字系统。
在二进制中,每一位只有两个可能的状态:0或1。
这就意味着,我们可以用二进制数表示所有数字。
二、二进制数转为整数的方法1、将二进制数中的每一位数与2的幂相乘,并将结果相加。
例如,将二进制数1011转换为十进制数时的计算过程如下:1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11这意味着,二进制数1011等于十进制数11。
2、我们还可以使用下面的方法将二进制数转换为整数:从最右侧开始,将每个数字乘以2的幂,然后将它们相加。
例如,将二进制数1011转换为十进制数时的计算过程如下:1*(2^0) + 1*(2^1) + 0*(2^2) + 1*(2^3) = 1 + 2 + 0 + 8 =11三、实例例如,将二进制数1011转换为十进制数的计算如下:1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11因此,二进制数1011等于十进制数11。
四、总结在计算机技术中,二进制数是非常重要的。
当我们需要将二进制数转换为整数时,可以使用两种不同的方法:将二进制数中的每一位数与2的幂相乘,并将结果相加,或者从最右侧开始,将每个数字乘以2的幂,然后将它们相加。
因此,二进制数不仅是计算机技术中的基础,也是了解计算机数字系统的绝佳途径。
浮点数到整数的快速转换之前在看 lua 源码的时候,看到⼀处浮点数转整数的⽅法,当时确实吓我⼀跳,后来在⽹上搜索了才知道浮点数原来还有这么神奇的地⽅,我看到⼀篇喜欢的⽂章,翻译⼀下(英⽂⼀般还请见谅),⼤家要闲着没事可以看看,先贴出 lua 中的转换⽅法。
/*@@ lua_number2int is a macro to convert lua_Number to int.@@ lua_number2integer is a macro to convert lua_Number to lua_Integer.** CHANGE them if you know a faster way to convert a lua_Number to** int (with any rounding method and without throwing errors) in your** system. In Pentium machines, a naive typecast from double to int** in C is extremely slow, so any alternative is worth trying.*/// 这是这个⽂件最trick的地⽅,把⼀个double数转换成long,⽤到了神奇的数字6755399441055744.0/* On a Pentium, resort to a trick */#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) && !defined(__SSE2__) && (defined(__i386) || defined (_M_IX86) || defined(__i386__))union luai_Cast { double l_d; long l_l; };#define lua_number2int(i,d) { volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; }#define lua_number2integer(i,n) lua_number2int(i, n)/* this option always works, but may be slow */#else#define lua_number2int(i,d) ((i)=(int)(d))#define lua_number2integer(i,d) ((i)=(lua_Integer)(d))#endif上⾯⽤到了⼀个神奇的数字 6755399441055744.0,通过把⼀个 double 类型的数加上这个数字再直接拿来⽤就是整型了。
vhdl 二进制转整数
在VHDL中,经常需要将二进制数据转换为整数。
二进制数在VHDL中
通常使用标准的位向量表示。
例如,一个 4-bit 二进制数可以表示为:```。
signal binary_num : std_logic_vector(3 downto 0) := "0101";。
```。
要将二进制数转换为整数,通常需要使用一个函数或过程来执行转换。
在VHDL中,可以使用以下代码来实现一个二进制到整数的转换函数:```vhdl。
function bin2int(bin : std_logic_vector) return integer is。
variable int_val : integer := 0;。
begin。
for i in bin'length-1 downto 0 loop。
int_val := int_val + (2某某i) 某
to_integer(unsigned(bin(i)));。
end loop;。
return int_val;。
end function;。
```。
在这个函数中,输入参数是一个 `std_logic_vector` 类型的二进制数,输出是一个整数类型变量。
函数内部首先定义了一个整数变量
`int_val`,它用于存储转换后的整数值。
然后使用 `for`循环遍历二进制数的每一位。
在循环中,使用了 `unsigned`函数将每一位转换为无符号整数类型。
然后使用 `to_integer`函数将该位转换为整数类型。
这个整数乘以当前位的权重,再加到 `int_val` 变量中。
最后,整个循环结束时,返回 `int_val` 变量的值,即为转换后的整数值。
假设在上面的代码片段中,`binary_num` 的值为 "0101",那么调用`bin2int` 函数,并将 `binary_num` 作为参数传递给函数,将会返回整数 5 作为输出。
总之,在VHDL中,将二进制数据转换为整数的过程需要使用函数或过程,并且需要注意权重的计算,以获取正确的转换结果。