FPGA 补码存在的意义

        每一个人都有存在的意义, 有的人用一生的时间去寻找自己的存在意义, 有的人则是经过生活的大反转,看到了自己存在意义,有的人则不闻不问 ... 当然补码也有存在的意义, 补码存在的意义, 就是避免计算机去做减法的操作。 为什么数字电路中要使用补码呢?因为:作减法运算时,如果两个数是用原码表示的,则首先需要比较两数绝对值的大小,然后以绝对值大的一个作为被减数、绝对值小的一个作为减数,求出差值,并以绝对值大的一个数的符号作为差值的符号。不难看出,这个操作过程比较麻烦,而且需要使用数值比较电路和减法运算电路。如果能用两数的补码相加代替上述的减法运算,那么计算过程中就无需使用数值比较电路和减法运算电路了,从而使运算器的电路结构大为简化。

       为了说明补码运算的原理,我们先来讨论一个生活中常见的事例。例如你在5点钟的时候发现自己的手表停在10点上了,因而必须把表针拨回到5点。由图E4b20334001-01Z上可以看出,这时有两种拨法:第一种拨法是往后拨5格,(因10-5=5),可拨回到5点;另一种拨法是往前拨7格,(因10+7=17)。由于表盘的最大数是12,超过12以后的“进位”将自动消失,于是就只剩下减去12以后的余数了,即17-12=5,由此也可把表针拨回到5点。这个例子说明,10-5的减法运算可以用10+7的加法运算代替。因为5和7相加正好等于产生进位的模数12,所以我们称7为-5对模12的补数,也叫做补码。

“补码君”存在的意义 - dljlpz - 将来的某一天
. 进一步的分析表明,在将两个数的补码相加时,如果将两个补码的符号位和数值部分产生的进位相加,则得到的和就是两个二进制数相加后代数和的符号。

例如要计算0101-1001,则可以先求出0101和-1001的补码00101和10111(最高位为符号位),再将两个补码相加而得到:

“补码君”存在的意义 - dljlpz - 将来的某一天

如果需要求出负数补码对应的原码,只要对这个补码再求一次补码就可以得到了。

 

在FPGA设计中,如果代码中当我们使用“-” 算术操作符的时候,其实就是使用补码的形式,具体如下:

    A = 8'd5;
   B = 8'd9; 

    A - 等价于 +(~B +1'b1) 

在实际的操作中,综合器都会对电路如上优化。

 例子1:

假设 -3 + 8 , 只要将 -3 转为补码形式, 亦即 0011=>1101 , 然后和 , 亦即 1000 相加
就会得到 
,亦即 0101 。 至于溢出的最高位可以无视掉。

    1101      -3 补 
+ 1000     8

    0101     5

例子2:

    1101     -3 补 
+  1110     -2 

    1011     -5 

这里要说明一个最重要的地方:首先,在Verilog-1995中,只有integer数据类型被转移成有符号数,而reg和wire数据类型则被转移成无符号数。由于integer 类型有固定的32位宽,因此它不太灵活,而reg型与wire型的可以自己定义位宽。在Verilog-2001中,有符号形式也被扩展到reg和wire数据类型中。哈哈,新加一个关键字,signed。eg:reg   signed [7:0] a, b;

reg [0:5] Bar;

integer Tab;

Bar = 4 - 6;

Tab = 4 - 6;

这里:我们已经知道计算机中,所有数据最终都是使用二进制数表达。 也已经学会如何将一个10进制数如何转换为二进制数。 一个负数如何用二进制表达?在计算机中,负数以其正值的补码形式表达。注意在两种情况下,位向量存储内容都相同(都是111110即-2的补码);但是在第一种情况下,向量被解释为无符号数,而在第二种情况下,向量被 解释为有符号数。Bar被赋于十进制值62(-2的二进制补码),而Tab被赋于十进制值-2(位向量为111110)。

下面为另一个实例:

 

Bar = -2 + (-4);

Tab = -2 + (-4);

>Bar被赋于十进制值58(位向量为111010),而Tab被赋于十进制值-6(位向量为111010)。 这里Bar的位宽是6,所以模为64,则-6的补码是58,即是Bar被赋予的值。

注意:上边这里的用法也可以用在异步fifo的代码中,在进行地址指针的相减时。

### FPGA 笔试题库 题目汇总 以下是基于已知引用内容整理的 FPGA 相关笔试题目的总结: #### 一、单选题 1. **关于时钟周期计算** 已知某语句中 `clk` 的频率为 50 MHz,则其对应的时钟周期为多少?[^2] 2. **开发环境选择** Xilinx FPGA 器件使用的官方开发软件是什么?选项包括 Vivado、Quartus II 和 ModelSim。[^2] 3. **竞争与冒险处理** 数字电路设计中,为了消除因竞争和冒险带来的毛刺现象,通常采取哪种措施?是否可以通过 RC 滤波电路解决? 4. **赋值方式的选择** 在边沿敏感的时序逻辑代码中,使用何种赋值方式可能导致综合前后仿真结果不一致?应选用阻塞还是非阻塞赋值? 5. **数字大小比较** 在 Verilog HDL 中,给定多个不同形式表示的数字(如二进制、十进制、十六进制),如何判断其中的最大值? 6. **多层嵌套的影响** 当在 Verilog 或 VHDL 编程中使用多层 `if-else` 条件嵌套时,如果某些分支未被完全覆盖,是否会引发潜在的设计隐患?[^2] 7. **逻辑电路分类** FPGA 设计过程中涉及的主要逻辑电路类型及其具体实现方式分别是哪些?例如,时序逻辑电路通过寄存器实现,而组合逻辑则依赖门电路完成。[^2] 8. **触发器数量统计** 提供一段简单的 Verilog 代码片段,分析该代码经综合后实际生成了多少个触发器实例化对象。[^2] 9. **双向总线管理** 在设计支持双向通信的数据总线结构时,为了避免冲突或其他异常情况发生,当总线处于无输出状态时应当将其设置为何种默认值? 10. **表达式合法性校验** 列举若干可能用于描述硬件行为的表达式样例,并从中挑选出符合标准语法规范的有效版本作为正确答案之一。 --- #### 二、不定项选择题 1. **并行执行特性识别** 下列各项操作指令里,哪几条并不属于典型的并行运行机制范畴之内? 2. **三态引脚配置理解** 如果某个外部接口端口允许调整至三种独立的工作模式下运作的话,请问这所谓的“三态”确切含义指代什么概念呢? 3. **同步 vs 异步差异探讨** 结合实际情况对比说明同步与时钟无关异步两种控制策略之间存在那些显著区别之处。 4. **基础数据模型构成解析** 根据 IEEE 定义的标准规定得知,在 Verilog-HDL 所构建起来的基础数值体系当中一共包含了几个核心组成部分啊? 5. **EDA 工具链角色定位认知** EDA 技术领域里面扮演着把高层次抽象语言转换成为低层次物理实体映射桥梁作用的关键性应用程序叫啥名字呀? 6. **标识符命名规则遵循原则确认** 参考官方文档给出的相关指导方针来判定下面列举出来的这些候选名称字符串之中究竟有没有违反既定约束条件的情况出现哦! 7. **补码编码规律掌握程度测试** 假设我们正在讨论一个具有八个比特宽度范围内的整型变量代表负数情形下的特殊情况即零减去十五所得结果的表现形式应该是怎样的样子咧? 8. **存储资源分配规划思路分享** 描述如下声明语句所创建出来的一维数组或者说是二维矩阵的具体尺寸规格参数以及它能够容纳保存下来的信息总量上限容量极限吧:`reg [3:0] mem [2:0];` 9. **高级建模语言优势体现方面阐述观点** SystemVerilog 引入面向对象程序设计理念之后带来了诸多便利好处其中之一便是可以方便快捷地定义重用性强易于维护扩展的新类(Class),但是与此同时也有部分开发者反映说这样做反而增加了学习成本门槛太高难以接受适应等问题存在争议分歧意见较大你怎么看这个问题呢能不能简单谈一下自己的看法见解怎么样? 10. **时间精度设定意义解释清楚明白易懂些哈~** 设置全局统一的时间单位比例关系比如这样写法:"`timescale 1ns / 10ps"`到底意味着什么呢?它的主要用途体现在什么地方最常应用于那种场景环境下比较好一些呐?? --- ### 示例代码片段 以下是一段常见的 Verilog 实现示例: ```verilog module counter ( input wire clk, input wire reset_n, output reg [3:0] count ); always @(posedge clk or negedge reset_n) begin if (!reset_n) begin count <= 4'b0; end else if (count == 4'd9) begin count <= 4'b0; end else begin count <= count + 1; end end endmodule ``` 这段代码展示了如何利用有限状态机的思想构造一个带有自动清零功能的小规模加法计算器模块。[^1] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值