Verilog学习日志(16位运算器,可满足加减算术运算和与或非异或逻辑运算)

这次用Verilog进行一个16位简单运算器进行建模并仿真
题目如下:
需要的功能有加、减、按位与、按位或、对输入一按位非、按位异或。16位加法器需自己完成,不要使用“+“。
根据题目,画出如图架构
在这里插入图片描述
然后根据架构,来进行各个功能的设计,逻辑运算非常简单,关键在于加减法的实现,因为减去一个正数可以表示为加上一个负数的补码,所以结果都采用补码表示,运算过程通过补码进行运算。
我这里加法器的设计为行波进位加法器(更细致的讲解可以参照https://blog.csdn.net/zhouxuanyuye/article/details/103834320?spm=1001.2014.3001.5501 纸上谈芯这位大佬的博客,讲的非常详细)
Verilog是硬件描述性语言,如果在编写代码之前,能把逻辑电脑在脑海中构思或者在纸上画出来,代码编写会事半功倍。
构建加法器的过程,我们就采用行波进位加法器的做法。
全加器Verilog代码如下:

module fadder(
    input a,     //operand0输入的补码
    input b,	//operand1输入,加法为补码,减法为反码
    input ci,   //若位减法,则为1,加法则为0
  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
根据提供的引用内容,可以得知已经有8位算术逻辑运算电路图的设计,但是没有提供具体的电路图。因此,我将为您介绍一下8位算术逻辑运算的基本原理和实现方法。 8位算术逻辑运算是计算机中的一个重要组成部分,它可以实现各种算术逻辑运算,如加、减、与、或、非、异或等。其基本原理是将两个8位二进制数输入到运算中,经过运算后输出一个8位的结果。下面是一个简单的8位算术逻辑运算的电路图: ```verilog module ALU(input [7:0] A, input [7:0] B, input [2:0] opcode, output reg [7:0] result, output reg zero, output reg carry, output reg overflow); always @(*) begin case (opcode) 3'b000: result = A + B; // 加法 3'b001: result = A - B; // 减法 3'b010: result = A & B; // 与运算 3'b011: result = A | B; // 或运算 3'b100: result = ~A; // 非运算 3'b101: result = A ^ B; // 异或运算 3'b110: result = A << 1; // 左移一位 3'b111: result = A >> 1; // 右移一位 endcase end assign zero = (result == 8'b0); // 判断结果是否为0 assign carry = (result[8] == 1); // 判断是否有进位 assign overflow = ((A[7] == B[7]) && (A[7] != result[7])); // 判断是否溢出 endmodule ``` 上述电路图中,输入A和B是两个8位的二进制数,opcode是一个3位的控制信号,用于选择不同的运算方式。输出result是一个8位的二进制数,表示运算结果;zero表示结果是否为0;carry表示是否有进位;overflow表示是否溢出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值