为了方便计算,计算机中所有的数的形式都是以补码的形式存储。
补码的转换规则如下:
1.(正数)补码=(正数)本身
2.(负数)补码=(负数非符号位)取反加一 如果我们设置数字为无符号数,那么其遵循转换规则1即可 如果我们设置数字为有符号数,那么其正数遵循转换规则1,负数遵守规则2。
在计算机中补码运算规则如下: 正数+正数=>(正数)补码+(正数)补码=(正数)补码 负数+负数=>(负数)补码+(负数)补码=>(负数)补码 正数+负数=>(正数)补码+(负数)补码=>(负数)补码 or(正数)补码
在verilog中一个简单的补码运算如下:
`timescale 1ns / 1ps module operation(); reg[7:0] a0,b0,a1,b1; reg[7:0] result; initial begin //以有符号数来表示 assign a0=8'b10000111;//-7 assign a1=8'b00000111;//7 assign b0=8'b00000101;//5 assign b1=8'b10000101;//-5 result=~a0[6:0]+8'b1+b0;//-7+5 $display("%b",result); result=(~a0[6:0]+8'b1)+(~b1[6:0]+8'b1);//-7-5 $display("%b",result); end reg[8:0] result1; initial begin assign a0=8'b01011101;//93 assign a1=8'b01101011;//107 assign b0=8'b11011101;//-93 assign b1=8'b11101011;//-107 result1=a0+a1;//93+107 $display("%b",result1); result1=(~b0[6:0]+8'b1)+(~b1[6:0]+8'b1);//-93-107 $display("%b",result1); end endmodule运行结果如下:
简单的实现如下:
`timescale 1ns / 1ps module hello(); initial begin $display("hello 20188852"); $finish; end endmodule运行结果如下:
运行结果如下(输出四种结果):
冒泡排序在c中的实现
结果如下: 参考文献如下: Veriog中的四种结构(initial,always,task,function) verilog常用系统函数以及例子 ps: 关闭仿真在vivado的控制台中输入close_sim
