verilog代码转化电路图_门电路实现补码运算

verilog代码转化电路图_门电路实现补码运算comp_conv.v://2022-1-19verilog学习//补码转换逻辑`timescale1ns/10ps;modulecomp_conv( a, a_comp );input[7:0] a;output[7:0] a_comp;//中间变量wire[6:0] b;//负数按位取反的幅度位(1位符号位+7位幅度位)wire[7:0] y;//负数的补码assign ..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在这里插入图片描述


comp_conv.v:


// 2022-1-19 verilog学习
// 补码转换逻辑
`timescale 1ns/10ps;

module comp_conv(
								a,
								a_comp
								);

input[7:0]			a;
output[7:0]			a_comp;

// 中间变量
wire[6:0]				b;  // 负数按位取反的幅度位 (1位符号位+7位幅度位)
wire[7:0]				y;  // 负数的补码

assign					b = ~a[6:0];
assign					y[6:0] = b+1;  // 负数的补码=幅度位按位取反+1
assign					y[7] = a[7];   // 符号位不变

// 二选一
assign					a_comp = a[7]?y:a; //正数(符号位[7]是0)的补码是自己,负数的补码是y 

endmodule


// testbench 测试台
module comp_conv_tb;  
reg[7:0]						a_in;		 // 输入有变化,reg型变量
wire[7:0]						y_out;  // 输出要看,wire型变量

comp_conv comp_conv(
										.a(a_in),
										.a_comp(y_out)
										);  // 测试输入输出即可
										
initial begin
											a_in <= 0;  // a_in初始化
							#3000		$stop;			// 8位bit从00000000到11111111有256个变化,每个变化10ns,3000ns足够
end

always #10 a_in <= a_in+1; 

endmodule

简洁版


// 2022-1-19 verilog学习
// 补码转换逻辑
`timescale 1ns/10ps;

module comp_conv(
								a,
								a_comp
								);

input[7:0]			a;
output[7:0]			a_comp;

// 中间变量
//wire[6:0] b; // 负数按位取反的幅度位 (1位符号位+7位幅度位)
//wire[7:0] y; // 负数的补码

//assign b = ~a[6:0];
//assign y[6:0] = b+1; // 负数的补码=幅度位按位取反+1
//assign y[7] = a[7]; // 符号位不变
//assign y = {a[7],~a[6:0]+1};

// 二选一
//assign a_comp = a[7]?y:a; //正数(符号位[7]是0)的补码是自己,负数的补码是y 
assign						a_comp = a[7]?{ 
   a[7],~a[6:0]+1}:a;  // 二选一

endmodule


// testbench 测试台
module comp_conv_tb;  
reg[7:0]						a_in;		 // 输入有变化,reg型变量
wire[7:0]						y_out;  // 输出要看,wire型变量

comp_conv comp_conv(
										.a(a_in),
										.a_comp(y_out)
										);  // 测试输入输出即可
										
initial begin
											a_in <= 0;  // a_in初始化
							#3000		$stop;			// 8位bit从00000000到11111111有256个变化,每个变化10ns,3000ns足够
end

always #10 a_in <= a_in+1; 

endmodule


modelsim 仿真:

正数补码与原码相同

在这里插入图片描述
负数补码符号位 [7] 不变,幅度 [6:0]取反+1

在这里插入图片描述


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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192506.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月13日 下午7:22
下一篇 2025年12月13日 下午8:01


相关推荐

  • android 定时器的实现比较

    android 定时器的实现比较第一种,Handler+threadpublicclassMainActivityextendsActivity{TextViewtextView;inttime;Handlerhandler=newHandler(){@OverridepublicvoidhandleMessage(Messag

    2022年7月25日
    11
  • 永久解决VS Code终端中文乱码问题

    永久解决VS Code终端中文乱码问题在 Windows 下使用 VSCode 编译运行 都出现中文乱码的问题 今天我就遇见了这种情况 上网搜了半天也没有找到正确的解决方法 现将我把我的方法晒一下 中文的 windows 下的 cmd 默认使用 GBK 的编码 每次需要的时候只要在 VSCode 终端输入命令 chcp65001 切换代码页到使用 UTF 8 就可以解决中文代码的问题 只不过这种方法太麻烦了 每次进入终端都要输入命令 那有没有永久性解决

    2026年3月20日
    2
  • hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量

    hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量

    2022年1月6日
    44
  • process returned -1073741571_0x0000007a电脑蓝屏

    process returned -1073741571_0x0000007a电脑蓝屏前言C++运行报错:Processreturned-1073741819(0xC0000005)是真的坑!!!申请的内存没有释放new后必须deletemalloc后必须free创建内核对象(比如CreateFile,CreateMutex,CreateThread),后必须释放内核对象句柄.创建内存映射文件,CreateFileMapping,MapViewOfFile后必须…

    2022年10月4日
    4
  • C++句柄类详解

    C++句柄类详解昨天由于时间的关系剩下一个小尾巴 今天忙里偷闲来把这个洞洞填上昨天学习了 面向对象编程 的部分 详细讨论了复制控制与类作用域需要注意的问题 这里有一个新的问题 如何实现一个类似 购物车 的数据结构呢 用过淘宝的同学们一定都晓得 购物车 应用 可以记录不同的商品 并且相同的商品可以显示次数 最后计算出总额 如果用 C 来实现的话 当然是首选容器对象了 由于是统计可以重复的对象 所以可以使用 multi

    2026年3月19日
    3
  • @NotNull 等注解的简单使用

    @NotNull 等注解的简单使用注册一个账号,有账号+密码前端会做一个判空,但是后端同时也要做一个判空,防止url直接访问这时后端的代码通常是:if(name!=null){ return”账号不能为空,请重新输入”;}elseif(password!=null){ return”密码不能为空,请重新输入”;}这样就会显得特别low,而且极不美观这时候就要用到一个注解@NotNull简单举例说明:@DatapublicclassUserInfo{@NotNull(message=”

    2025年5月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号