VHDL怎么定义一个8位的无vhdl 有符号数变量,求!!!!!

在其中定义了一些常用的数据类型和函数,如STD_;常用的资源库有:;STD库:它定义了若干类型、子程序和函数;TEXTIO程序包:该包预先在STD库中编译,它;STD_LOGIC_1164程序包:该程序包在I;NUMERIC_STD程序包:该程序包定义了用于;NUMERIC_BIT程序包:该程序包为VHDL;4、配置;配置(Configuration)用于从
在其中定义了一些常用的数据类型和函数,如STD_LOGIC、STD_LOGIC_VECTOR等类型。它预先在IEEE库中编译过,故在调用时需要在前面首先打开IEEE库,即library IEEE语句。除了这些标准的包外,用户还可以自己定义包集合,包集合由两部分组成:包集合说明和包集合体,包集合说明部分主要用于说明一些数据类型、常量、元件、子程序等,包集合体单元为可选,只有在说明中有子程序或延时常量的说明时,必须有包集合体来描述具体的子程序或延时常量的具体值。自定义的包集合和标准包一样,必须通过调用才能使用。
常用的资源库有:
STD库:它定义了若干类型、子程序和函数。主要包括:布尔类型、Bit类型、字符类型、出错级别、实数范围、整数范围、时间单位、延迟长度、自然数范围等。IEEE1076规定,该库与所有模型自动连接。
TEXTIO程序包:该包预先在STD库中编译,它支持ASC I/O操作的若干类型和子程序。不能自动与任意模型连接,需要在使用它的任一设计单元之前加上use std.textio.all语句。有些公司扩充了VHDL的I/O功能。
STD_LOGIC_1164程序包:该程序包在IEEE库中,它包括了一些常用的函数和数据类型。访问其中的函数需要使用library和use语句。STD_LOGIC_1164中包含以下数据类型:STD_ULOGIC、STD_ULOGIC_VECTOR、STD_LOGIC、STD_LOGIC_VECTOR。
NUMERIC_STD程序包:该程序包定义了用于综合的数值类型和算术类型。其中的数值类型为:Unsigned(表示向量形式的无符号数)和Signed(表示向量形式的带符号数)。数据的最左端为最高位,带符号的向量采用2的补码的形式。该程序包中包含了signed和unsigned类型的数据的算术运算,也含有类型转换函数、时钟检测函数和其他的实用函数。
NUMERIC_BIT程序包:该程序包为VHDL的综合程序包,其基本元素类型为bit类型,在一些VHDL仿真中,把这个包预先编译在IEEE库中,使用前需要声明。
配置(Configuration)用于从库中选取所需单元来组成系统设计的不同版本,配置语句描述了层与层之间的连接关系以及实体与结构体之间的连接关系。设计者可以利用这种配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某一个实体时,可以利用配置来选择各种不同的构造体,进行性能对比测试以得到性能最佳的构造体。在VHDL中,配置的功能就是把设计实体中某一结构所安装的元件指定参数值(Generic的功能),这种方法为不同的半导体工艺的器件提供了一种最后指定延时参数的能力。也可以在实际布线之后,由EDA工具计算出实际延时,再把这种延时参数用配置的参数传递能力去指定、追加、补充、校正参数。
库存放已经编译的实体、构造体、包集合和配置,库可由用户生成或由ASIC芯片制造商提供,以便在设计中为大家所共享。使用库的方法是在该设计项目的开头声明选用的库名,用use语句声明选中的逻辑单元,一个设计单元可以访问多个库,这样就可以重复利用其他人或其他公司设计的模块。VHDL的库分为两种类型,一种是设计库,一种是资源库。设计库无需library和use语句既可调用,一般包括STD库和WORK库,STD库中有包括了
STANDARD和TEXTIO两个程序包,WORK库是VHDL语言的工作库,设计者在项目设计中的任何中间件都是放在WORK库中的,该库用于保存当前正在进行的设计,是项目开发过程中各种VHDL工具处理设计文件的地方。资源库是除了STD和WORK之外的其他库,其中的有些库是被IEEE所认可的,称为IEEE库,VHDL工具厂商及EDA工具公司都有自己的资源库,这样可以丰富工具种类和元件的类型,增加IP模块的可重复利用率,用户也可以自己建立库文件,以重复利用以往的设计。IEEE库中含有的程序包主要有:
STD_LOGIC_1164
NUMERIC_BIT
NUMERIC_STD
MATH_COMPLEX
VITAL_TIMING
VITAL_PRIMITIVES
5.2.2 结构体的子结构描述
当要设计的电路较为复杂时,设计者往往将电路分为不同的模块分别进行设计,这些在VHDL中表现为一个设计实体可以有多个不同的结构体,而描述各个结构体的方法主要有以下三种:
1、多进程描述
多个进程语句的结构描述为:
[进程1名]:process(信号1,信号2,……)
end process (进程1名);
[进程2名]:process(信号1,信号2,……)
end process (进程2名);
要注意的是进程之间是并行的,进程内部是串行执行的,process后面所列的参数表称为敏感表,只要该表中的任何一个信号发生变化,对应的进程就开始顺序执行,执行完之后等待敏感表的下一次变化,周而复始地运行。如果进程中不带有敏感表,则必须在进程中增加wait语句来激励。使用方法是:wait on a for 40表示等待a发生变化,一旦a发生变化,40ns后开始执行进程。多个进程之间的通信是通过信号和共享变量值来实现的,因为对于构造体而言,信号具有全局特性,是进程之间联系的重要途径,因此在任一进程内不允许定义信号和共享变量。
2、多模块描述
多个模块类似于将一个电路原理图划分为多个子模块进行绘制,其中的每一个子模块都
是一个具体的原理图。VHDL中BLOCK模块所描述的各个语句是并行执行的,和各个语句的书写顺序无关(另外:在结构体内的各个语句也是并行执行的)。BLOCK语句的应用只是将结构体中的并行描述语句进行组合的方法,其主要目的是改善并行语句及其结构的可读性或关闭某些信号。书写格式如下:
BLOCK[表达式]
[端口说明语句]
[类属参数说明语句]
end block 块结构名;
其中端口说明类似于原理图的端口说明,可以包含port、generic、port map、generic map等引导的端口说明语句。块的说明语句部分只能适用于当前的块。当BLOCK后的表达式为真是,开始并行执行块内语句。在实际的电路设计中,使用BLOCK与否对电路的功能每一任何影响,从综合的角度来讲,BLOCK是无任何意义的。因此不常使用。
3、多子程序描述
多个子程序(subprogram)语句描述:子程序是具有某一特定功能的程序段,能够被主程序调用。在调用时,主程序向子程序传递参数,子程序执行完之后将处理结果返回给主程序。子程序内部的变量值不能够保留。子程序包括两种:过程(procedure)和函数(function)。过程与高级语言中的子程序相当,函数与高级语言中的函数相当。
过程的书写格式如下:
procedure 过程名(参数1,参数2,………);
[变量说明]
[顺序处理语句]
end 过程名;
函数的书写格式如下:
function 函数名(参数1,参数2,……)
return 数据类型名 is
[定义语句]
[顺序处理语句]
return [返回变量值];
end 函数名;
5.2.3 标示符(Identifier)
标示符是指VHDL中的代表一定含义的符号。一个规范的程序的标示符应能从字面上了解到其代表的含义。VHDL有两个标准版:VHDL’87和VHDL’93。前者的标示符称为短标示符,而后者中的标示符包含了短标示符和扩展标示符。
短标示符由字母、数字和下划线组成。具体的要求如下:
首字符必须是字母;
末字符不能是下划线;
不允许出现两个连续的下划线;
大写字母与小写字母等价,即不区分大小写;
扩展标示符用反斜杠来定界,即扩展标示符以反斜杠为开始和结尾。在其中允许出现键盘上的特殊符号,如$%及空格等符号,两个反斜杠之间可以为系统的保留字、可以以数字字符开始、允许多个下划线相连,扩展标示符区分大小写。
VHDL定义的保留字(或称为关键字)不能作为短标示符。VHDL中定义的保留字有: abs
architecture
attribute begin
configuration constantdis connect
generate genetic
postponed procedure
severity signal
srlsubtype then
unaffected
VHDL中的注释由双减号开始,直到行尾。
5.2.4数据对象(Data Object)
数据对象中保存有某种类型的值,主要有常数(constant)、信号(Signal)、变量(variable)和文件(file)四种类型,使用前必须声明该字符串的类型。常量常用来指设计中不会变换的值,使用常量可以提高代码的可读性,并使得代码易于修改;信号或变量可以被赋予一系列的值。分配给信号的值必须经过延时后才能成为当前值,而分配给变量的值则立即成为当前值;信号与硬件中的连线相对应,变量在硬件中每一直接的对应物,但变量在硬件的行为建模中十分有用。文件类型在写测试基准时有用。
常数的声明:
constant 常数名:数据类型:=表达式;
constant bus_width:integer:=8;
--表示以bus_width代表常数8
信号的声明:
signal 信号名 :数据类型 约束条件:=表达式;
signal clock:
变量的声明:
variable 变量名:数据类型 约束条件:=表达式;
variable count: integer 0 to 255 :=20;
别名(aliases)的概念:别名可以替代已存在的数据对象,引用别名等效于引用其所代表的对象,对别名的操作等效于对其所代表的对象的操作。
signal address: std_logic_vector(15 downto 0);
alias top_ad: std_logic_vector(7 downto 0) is address(15 downto 8);
--表示高8位
alias low_ad:std_logic_vector(7 downto 0) is address(7 downto 0);
--表示低8位
5.2.5数据类型
VHDL对数据类型的要求比较严格,每个对象只能具有一个数据类型,且只能具有该类型的值,对其操作时必须与其类型相匹配,若不匹配则必须通过函数进行转换。VHDL定义了十种标准的数据类型,允许用户自己定义数据类型。VHDL中定义的标准数据类型为:整数类型(INTEGER)、实数类型或浮点类型(REAL&FLOATING)、位类型(BIT)、位矢量类型(BIT_VECTOR)、布尔类型(BOOLEAN)、字符类型(CHARACTER)、时间类型或物理类型(TIME&PHYSICAL)、错误类型(NOTE,WARNING,ERROR,FAILURE)、自然数整数类型(NATURAL)、字符串类型(TRING);用户自己定义的数据类型有:枚举类型(ENUMERATED)、整数类型(INTEGER)、整数浮点数类型(REAL FLOATING)、数组类型(ARRAY)、存取类型(ACCESS)、文件类型(FILES)、记录类型(RECODE)、时间类型(TIME)。用户自定义的数据类型中有与标准类型相同的,例如用户自定义类型中也含义整数类型,这些自定义的类型为标准类型中的子类型,即用户在标准类型的基础上添加一些限制既可得到相应的自定义类型。
VHDL的这些数据类型可以分为四类:标量型、复合型、寻址型和文件型,其中前两种类型用于综合,后两种类型用于建立仿真模型。
1、标量类型(Scalar Types):
标量类型包括:整数类型、浮点类型、物理类型和枚举类型。
1) 整数类型(integer types)
VHDL支持-(231-1) 到(231-1)之间的整数。
例如:variable a:integer range C63 to 63;
2) 浮点类型(floating types)
VHDL规定的浮点类型范围为-1.0e38 到+1.0e38,而综合工具通常不支持该类型。
3) 物理类型(physical types)
包含各类专业文献、生活休闲娱乐、行业资料、文学作品欣赏、应用写作文书、中学教育、各类资格考试、96VHDL&VerilogHDL简明教程等内容。 
 Verilog 简明教程 Verilog 简明教程(适用于略有 HDL 知识,想快速了解 verilog 的人) 目录: A verilog 的流行,有两方面的原因; B verilog 与 VHDL 相比的优点 ...  HDL? 选择 VHDL 还是 verilog HDL?发布时间:
16:31 作者: iamqiao 信息来源: EDA 中国门户网站 字体: 小中大 打印硬件描述语言 HDL(Hardware ...  Verilog HDL和VHDL的比较_电子/电路_工程科技_专业资料。Verilog HDL和VHDL的比较,分析Verilog HDL 和 VHDL 的比较这两种语言都是用于数字电子系统设计的硬件描述语言...  VHDL 和 Verilog HDL 的区别_IT/计算机_专业资料。VHDL 和 Verilog HDL 的区别...《VHDL实用教程》完整版... 11页 免费 Verilog HDL教程 81页 2下载券©...  Verilog HDL和VHDL的比较_IT/计算机_专业资料。Verilog HDL 和 VHDL 的比较这两种...Verilog教程VHDL实例 99页 1下载券 Verilog,VHDL经典简明教... 44页 1下载券...   版权所有,侵权必究 第4页,共41页 Verilog HDL 入门教程 绝密 请...公司根据本身ASIC设计现有的 特 点、现状,主推Verilog HDL 语言,逐渐淡化VHDL...  QuartusII10.0简明教程_IT/计算机_专业资料。Quartus...方式或硬件描述语言方式(如 Verilog 或 VHDL) 进行...选择存储类型为 Verilog HDL File,填写名称为 light...  4 第三步:添加文件(file&new& VHDL file) ,新建完成之后要先保存。 我们选择 Verilog HDL File 设计文件格式既选择 Verilog 文本输入形式 第四步:编写程序 以...  Verilog HDL 语言简介 Verilog HDL VHDL 设计方法 Verilog HDL 语言简介 Verilog HDL 和 VHDL 是目前世界上最流行的两种硬件描述语言 (HDL: Hardware Description ...数字电路习题解答_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数字电路习题解答
上传于||文档简介
&&数​字​电​路​ ​习​题​解​答
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩137页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢VHDL语言教程.ppt -max上传文档投稿赚钱-文档C2C交易模式-100%分成比例文档分享网
VHDL语言教程.ppt
文档名称:VHDL语言教程.ppt
格式:ppt&&&大小:2.11MB&&&总页数:112
可免费阅读页数:112页
下载源文档需要:10元人民币
请务必先预览看看是否存在文不对题等情况,预览与实际下载的一致,本站不支持退款。21ic官方微信-->
后使用快捷导航没有帐号?
查看: 3192|回复: 27
收集C语言中8位机无符号整型跟两个无符号字符型互相转换的方法
&&未结帖(5)
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
学生不才最近在做一小型操作系统,牵涉到地址链接计算,其中有16位地址需转换成两个8位地址分成两次发送。为计算方便并优化系统,现收集C语言中8位机无符号整型跟两个无符号字符型互相转换的方法。
uchar b,c;
//整型转字符型
b=a;//低8位
c=(a&&8);//高8位
//字符型转整型
uchar b,c;
//整型转字符型
b=a/256;//高位
c=a%256;//低位
//字符型转整型
a=b*256+c;
这是我自己想到的方法,请广大同仁朋友老师指教!如另有方法,不吝分享!
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:77%打赏:0.00受赏:58.04
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
typedef union {
主题帖子积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
Leeone 发表于
typedef union {
主题帖子积分
高级技术员, 积分 684, 距离下一级还需 316 积分
高级技术员, 积分 684, 距离下一级还需 316 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:5.00
主题帖子积分
高级技术员, 积分 684, 距离下一级还需 316 积分
高级技术员, 积分 684, 距离下一级还需 316 积分
Leeone 发表于
typedef union {
不是很理解 怎么用啊?谢谢了
微信搜索dianzixiaoxuetang(电子小学堂全拼),分享各类嵌入式相关教程,代码例程。
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
Leeone 发表于
typedef union {
这只是个链表结构,不具备转换功能,倒可以跟我上面的例子结合,构成一个转换函数。
主题帖子积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
把操作系统SHOW一下呗~
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:77%打赏:0.00受赏:58.04
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
寒舍 发表于
这只是个链表结构,不具备转换功能,倒可以跟我上面的例子结合,构成一个转换函数。 ...
你还想把它咋写成转换函数,写个看看
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
Leeone 发表于
你还想把它咋写成转换函数,写个看看
struct&&tran{
uchar b,c;
data.a=data.b*256+data.c;
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:77%打赏:0.00受赏:58.04
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
寒舍 发表于
struct&&tran{
uchar b,c;
是union 你把它搞成 struct 了,union也不是你那样用地
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
原野之狼 发表于
把操作系统SHOW一下呗~
是套带有人机界面覆盖本公司大部分产品的半自动测试系统,说是小型系统,但也挺庞大的。程序体二十几K。尚未完工,还不适合展示。。
主题帖子积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
union直接取就是了,还转换啥呀。
主题帖子积分
中级工程师, 积分 4378, 距离下一级还需 622 积分
中级工程师, 积分 4378, 距离下一级还需 622 积分
主题帖子积分
专家等级:结帖率:38%打赏:0.00受赏:1.00
主题帖子积分
中级工程师, 积分 4378, 距离下一级还需 622 积分
中级工程师, 积分 4378, 距离下一级还需 622 积分
union,还有一种更简单的强制指针类型转换,这两种做法都比撸主的方法快得多,但是缺点是有大小端问题,移植的时候会出问题。撸主的方法虽然慢但是不存在大小端问题,但是可能会有int长度不同的问题。此事古难全。。。
上联:subway railway highway,way way to die
下联:investigator officer announcer,sir sir to lie
横批:welcome to china
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
Leeone 发表于
是union 你把它搞成 struct 了,union也不是你那样用地
哦,使用共用体!这想法真是别出一格!回头加分!
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 121, 距离下一级还需 179 积分
中级技术员, 积分 121, 距离下一级还需 179 积分
Leeone 发表于
typedef union {
为区分高8位低8位,还可以优化下
typedef union{
uchar b[2];
主题帖子积分
中级技术员, 积分 202, 距离下一级还需 98 积分
中级技术员, 积分 202, 距离下一级还需 98 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 202, 距离下一级还需 98 积分
中级技术员, 积分 202, 距离下一级还需 98 积分
这里有链接 我看了 懂了呢。。原来8位也可以扩展为16位。。但是要是整型数据有符号的呢?
主题帖子积分
高级工程师, 积分 6903, 距离下一级还需 1097 积分
高级工程师, 积分 6903, 距离下一级还需 1097 积分
主题帖子积分
专家等级:结帖率:100%打赏:1.00受赏:3.00
主题帖子积分
高级工程师, 积分 6903, 距离下一级还需 1097 积分
高级工程师, 积分 6903, 距离下一级还需 1097 积分
这也算个问题啊
本人求职:求什么の,算求~ |&&深圳 &&&广州 | 大哥大号 :OO
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:77%打赏:0.00受赏:58.04
主题帖子积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
助理工程师, 积分 1969, 距离下一级还需 31 积分
寒舍 发表于
为区分高8位低8位,还可以优化下
typedef union{
数组也可以强制类型转换。总得来说大小端问题是要考虑的
主题帖子积分
中级工程师, 积分 3629, 距离下一级还需 1371 积分
中级工程师, 积分 3629, 距离下一级还需 1371 积分
主题帖子积分
专家等级:结帖率:58%
主题帖子积分
中级工程师, 积分 3629, 距离下一级还需 1371 积分
中级工程师, 积分 3629, 距离下一级还需 1371 积分
#define HIGH(a) *((unsigned char)(&a))
主题帖子积分
初级工程师, 积分 2467, 距离下一级还需 533 积分
初级工程师, 积分 2467, 距离下一级还需 533 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:3.00
主题帖子积分
初级工程师, 积分 2467, 距离下一级还需 533 积分
初级工程师, 积分 2467, 距离下一级还需 533 积分
这是鄙人使用多年的方法,见笑了。
* __vat - 强制获取指定内存偏移数据
* & &- 内存地址基址
- 地址偏移
#ifndef __vat
#& &define __vat(_base,_offset)& && && &(((uint8*)(_base))[_offset])
/* 以大端格式读取16位数值& &*/
#define GET_BE_UINT16(pt)& && && && && &( ((uint16)__vat(pt,0) &&&&8) \
& && && && && && && && && && && && && & | ((uint8 )__vat(pt,1) &&&&0) )
/* 以大端格式读取24位数值& &*/
#define GET_BE_UINT24(pt)& && && && && &( ((uint32)__vat(pt,0) && 16) \
& && && && && && && && && && && && && & | ((uint16)__vat(pt,1) &&&&8) \
& && && && && && && && && && && && && & | ((uint8 )__vat(pt,2) &&&&0) )
/* 以大端格式读取32位数值& &*/
#define GET_BE_UINT32(pt)& && && && && &( ((uint32)__vat(pt,0) && 24) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,1) && 16) \
& && && && && && && && && && && && && & | ((uint16)__vat(pt,2) &&&&8) \
& && && && && && && && && && && && && & | ((uint8 )__vat(pt,3) &&&&0) )
/* 以大端格式读取64位数值& &*/
#define GET_BE_UINT64(pt)& && && && && &( ((uint64)__vat(pt,0) && 56) \
& && && && && && && && && && && && && & | ((uint64)__vat(pt,1) && 48) \
& && && && && && && && && && && && && & | ((uint64)__vat(pt,2) && 40) \
& && && && && && && && && && && && && & | ((uint64)__vat(pt,3) && 32) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,4) && 24) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,5) && 16) \
& && && && && && && && && && && && && & | ((uint16)__vat(pt,6) &&&&8) \
& && && && && && && && && && && && && & | ((uint8 )__vat(pt,7) &&&&0) )
/* 以大端格式写16位数值& &&&*/
#define PUT_BE_UINT16(pt,val) \
& & __vat(pt,0) = (uint8)((uint16)(val) &&&&8); \
& & __vat(pt,1) = (uint8)((uint8 )(val) &&&&0); \
/* 以大端格式写24位数值& &&&*/
#define PUT_BE_UINT24(pt,val) \
& & __vat(pt,0) = (uint8)((uint32)(val) && 16); \
& & __vat(pt,1) = (uint8)((uint16)(val) &&&&8); \
& & __vat(pt,2) = (uint8)((uint8 )(val) &&&&0); \
/* 以大端格式写32位数值& &&&*/
#define PUT_BE_UINT32(pt,val) \
& & __vat(pt,0) = (uint8)((uint32)(val) && 24); \
& & __vat(pt,1) = (uint8)((uint32)(val) && 16); \
& & __vat(pt,2) = (uint8)((uint16)(val) &&&&8); \
& & __vat(pt,3) = (uint8)((uint8 )(val) &&&&0); \
/* 以大端格式写64位数值& &&&*/
#define PUT_BE_UINT64(pt,val) \
& & __vat(pt,0) = (uint8)((uint64)(val) && 56); \
& & __vat(pt,1) = (uint8)((uint64)(val) && 48); \
& & __vat(pt,2) = (uint8)((uint64)(val) && 40); \
& & __vat(pt,3) = (uint8)((uint64)(val) && 32); \
& & __vat(pt,4) = (uint8)((uint32)(val) && 24); \
& & __vat(pt,5) = (uint8)((uint32)(val) && 16); \
& & __vat(pt,6) = (uint8)((uint16)(val) &&&&8); \
& & __vat(pt,7) = (uint8)((uint8 )(val) &&&&0); \
/* 以小端格式读取16位数值& &*/
#define GET_LE_UINT16(pt)& && && && && &( ((uint8 )__vat(pt,0) &&&&0) \
& && && && && && && && && && && && && & | ((uint16)__vat(pt,1) &&&&8) )
/* 以小端格式读取24位数值& &*/
#define GET_LE_UINT24(pt)& && && && && &( ((uint8 )__vat(pt,0) &&&&0) \
& && && && && && && && && && && && && & | ((uint16)__vat(pt,1) &&&&8) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,2) && 16) )
/* 以小端格式读取32位数值& &*/
#define GET_LE_UINT32(pt)& && && && && &( ((uint8 )__vat(pt,0) &&&&0) \
& && && && && && && && && && && && && & | ((uint16)__vat(pt,1) &&&&8) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,2) && 16) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,3) && 24) )
/* 以小端格式读取64位数值& &*/
#define GET_LE_UINT64(pt)& && && && && &( ((uint8 )__vat(pt,0) &&&&0) \
& && && && && && && && && && && && && & | ((uint16)__vat(pt,1) &&&&8) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,2) && 16) \
& && && && && && && && && && && && && & | ((uint32)__vat(pt,3) && 24) \
& && && && && && && && && && && && && & | ((uint64)__vat(pt,4) && 32) \
& && && && && && && && && && && && && & | ((uint64)__vat(pt,5) && 40) \
& && && && && && && && && && && && && & | ((uint64)__vat(pt,6) && 48) \
& && && && && && && && && && && && && & | ((uint64)__vat(pt,7) && 56) )
/* 以小端格式写16位数值& &&&*/
#define PUT_LE_UINT16(pt,val) \
& & __vat(pt,0) = (uint8)((uint8 )(val) &&&&0); \
& & __vat(pt,1) = (uint8)((uint16)(val) &&&&8); \
/* 以小端格式写24位数值& &&&*/
#define PUT_LE_UINT24(pt,val) \
& & __vat(pt,0) = (uint8)((uint8 )(val) &&&&0); \
& & __vat(pt,1) = (uint8)((uint16)(val) &&&&8); \
& & __vat(pt,2) = (uint8)((uint32)(val) && 16); \
/* 以小端格式写32位数值& &&&*/
#define PUT_LE_UINT32(pt,val) \
& & __vat(pt,0) = (uint8)((uint8 )(val) &&&&0); \
& & __vat(pt,1) = (uint8)((uint16)(val) &&&&8); \
& & __vat(pt,2) = (uint8)((uint32)(val) && 16); \
& & __vat(pt,3) = (uint8)((uint32)(val) && 24); \
/* 以小端格式写64位数值& &&&*/
#define PUT_LE_UINT64(pt,val) \
& & __vat(pt,0) = (uint8)((uint8 )(val) &&&&0); \
& & __vat(pt,1) = (uint8)((uint16)(val) &&&&8); \
& & __vat(pt,2) = (uint8)((uint32)(val) && 16); \
& & __vat(pt,3) = (uint8)((uint32)(val) && 24); \
& & __vat(pt,4) = (uint8)((uint64)(val) && 32); \
& & __vat(pt,5) = (uint8)((uint64)(val) && 40); \
& & __vat(pt,6) = (uint8)((uint64)(val) && 48); \
& & __vat(pt,7) = (uint8)((uint64)(val) && 56); \
费老半天功夫,终于看懂了。。用指针数组强制提取变量数据也算一种方法了。不知是否占资源,未检验。感谢分享!&
主题帖子积分
中级工程师, 积分 3308, 距离下一级还需 1692 积分
中级工程师, 积分 3308, 距离下一级还需 1692 积分
主题帖子积分
专家等级:结帖率:45%
主题帖子积分
中级工程师, 积分 3308, 距离下一级还需 1692 积分
中级工程师, 积分 3308, 距离下一级还需 1692 积分
感觉你这不叫“做一小型操作系统”,是在用吧。
目标是前进的动力
技术高手奖章
人才类勋章
时间类勋章
时间类勋章
技术奇才奖章
人才类勋章
欢快之小溪
发帖类勋章
社区建设奖章
等级类勋章
核心会员奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
时间类勋章
涓涓之细流
发帖类勋章
技术导师奖章
人才类勋章
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章
技术新星奖章
人才类勋章
无冕之王奖章
等级类勋章
时间类勋章
湍急之河流
发帖类勋章
精华达人奖章
等级类勋章
热门推荐 /4

我要回帖

更多关于 vhdl 有符号数 的文章

 

随机推荐