2 位有符号乘法器

如何解决2 位有符号乘法器

使用 4 位加法器的一个实例设计一个 2 位有符号乘法器。请记住,您需要将两个 2 位输入符号扩展为完整的 4 位。

这是我的作业,我想出了以下代码,但我的一些输出是错误的。谁能告诉我我做错了什么?

module mult(C,A,B);
    output signed[3:0]C;
    input signed[1:0]A,B;
    reg signed[3:0]sA,sB;

    assign sA = {A[1],A[1],A};
    assign sB = {B[1],B[1],B};
    
    wire carry;
    wire signed[3:0] A1;
    wire signed[3:0] A2;
    wire signed[3:0] sum0;
    
    and(A1[0],sA[0],sB[0]);
    and(A1[1],sA[1],sB[0]);
    and(A1[2],sA[2],sB[0]);
    and(A1[3],sA[3],sB[0]);
    
    
    assign A2[0] = 0;
    and(A2[1],sB[1]);
    and(A2[2],sB[1]);
    and(A2[3],sB[1]);
    
 
    adder4bit a1(.A(A1),.B(A2),.Co(carry),.sum(sum0));
    assign C[0] = sum0[0];
    assign C[1] = sum0[1];
    assign C[2] = sum0[2];
    assign C[3] = sum0[3];
endmodule

module adder4bit(A,B,sum,Co);
    input signed[3:0]A,B;
    output signed [4:0]sum;
    reg signed[4:0]a,b;
    output Co;
    
    wire Ci;
    assign Ci = 1'b0;
    assign a = {A[3],A};
    assign b = {B[3],B};
    
    FA a0(.A(a[0]),.B(b[0]),.Ci(Ci),.sum(sum[0]),.Co(w1));
    FA a1(.A(a[1]),.B(b[1]),.Ci(w1),.sum(sum[1]),.Co(w2));
    FA a2(.A(a[2]),.B(b[2]),.Ci(w2),.sum(sum[2]),.Co(w3));
    FA a3(.A(a[3]),.B(b[3]),.Ci(w3),.sum(sum[3]),.Co(w4));
    FA a4(.A(a[4]),.B(b[4]),.Ci(w4),.sum(sum[4]),.Co(Co));
endmodule

module FA(A,Ci,Co,sum);
    
    input A,Ci;
    output sum,Co;
    
    assign sum = (A^B)^Ci;
    assign Co = (B&Ci) | (A&Ci) | (A&B);
    
endmodule

解决方法

有一些信号声明为 reg 连接到端口输出,reg 必须在程序块中分配。

我还将加法器中的进位位设为显式 wire 向量,而不是多个隐式连线。隐式电线很危险,打字错误会导致断线。

我还声明乘法器中的 sum0 具有与其连接的 sum 端口的输出输入相同的宽度,即使位 4 不会被使用。

就逻辑而言,您只犯了一个错误,如果 A * B = A * B[0] - 2*A * B[1] 是 2 位有符号整数,则使用 A * B[0] + 2*B[1] 而不是 B。因为 B[1] 是符号位,因此 B = B[0] - 2*B[1]。我通过在端口连接中直接使用一元 - 解决了这个问题,我会让你在结构上写这个。

module mult(C,A,B);
  output signed[3:0]C;
  input signed[1:0]A,B;
  wire signed[3:0]sA,sB;

  assign sA = {A[1],A[1],A};
  assign sB = {B[1],B[1],B};

  wire carry;
  wire signed[3:0] A1;
  wire signed[3:0] A2;
  wire signed[4:0] sum0;

  and(A1[0],sA[0],sB[0]);
  and(A1[1],sA[1],sB[0]);
  and(A1[2],sA[2],sB[0]);
  and(A1[3],sA[3],sB[0]);


  assign A2[0] = 0;
  and(A2[1],sB[1]);
  and(A2[2],sB[1]);
  and(A2[3],sB[1]);

  // FIXME: Notice that I am passing -A2,the simulator will
  // negate the signal automatically. Maybe for your assignment
  // you are requried to expand this using logic primitives...
  adder4bit a1(.A(A1),.B(-A2),.Co(carry),.sum(sum0));
  assign C[0] = sum0[0];
  assign C[1] = sum0[1];
  assign C[2] = sum0[2];
  assign C[3] = sum0[3];
endmodule

module adder4bit(A,B,sum,Co);
  input signed[3:0]A,B;
  output signed [4:0]sum;
  wire signed[4:0]a,b;
  output Co;
  wire [4:1] w;  
  wire Ci;
  assign Ci = 1'b0;
  assign a = {A[3],A};
  assign b = {B[3],B};
  
  
  FA a0(.A(a[0]),.B(b[0]),.Ci(Ci),.sum(sum[0]),.Co(w[1]));
  FA a1(.A(a[1]),.B(b[1]),.Ci(w[1]),.sum(sum[1]),.Co(w[2]));
  FA a2(.A(a[2]),.B(b[2]),.Ci(w[2]),.sum(sum[2]),.Co(w[3]));
  FA a3(.A(a[3]),.B(b[3]),.Ci(w[3]),.sum(sum[3]),.Co(w[4]));
  FA a4(.A(a[4]),.B(b[4]),.Ci(w[4]),.sum(sum[4]),.Co(Co));
endmodule


module FA(A,Ci,Co,sum);
    
  input A,Ci;
  output sum,Co;

  assign sum = (A^B)^Ci;
  assign Co = (B&Ci) | (A&Ci) | (A&B);
    
endmodule

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res