Verilog学习

学习网站

HDLBits
代码解析

基本知识

进制

二进制是B,八进制是O,十进制是D,十六进制是H。

out=16'hffff;//意思是out=1111 1111 1111 1111
out = 4'd1;

在这里插入图片描述

门符号

在这里插入图片描述

基本语法

例题

模块化

题目链接
题目要求我们创建一个100bit的二进制的加法器,该电路共包含两个100bit的输入和一个cin, 输出产生sum和cout。

module top_module( 
    input [99:0] a, b,
    input cin,
    output cout,
    output [99:0] sum );

    wire [99:0] cout_temp;

    //这还是将本次计算的cout当作下次计算的cin来使用
    fadd inst1_fadd(
        .a(a[0]),
        .b(b[0]),
        .cin(cin),
        .cout(cout_temp[0]),
        .sum(sum[0])
    );

    genvar i;

           generate 
               for(i=1; i<100; i=i+1)
                   begin: add
                       //例化100次全加器
                       fadd inst2_fadd(
                           .a(a[i]),
                           .b(b[i]),
                           .cin(cout_temp[i-1]),
                           .cout(cout_temp[i]),
                           .sum(sum[i])
                       );
                   end
           endgenerate

     assign cout = cout_temp[99];

endmodule

module fadd (
    input a, b, cin,
    output sum, cout
);

assign {cout, sum} = a + b + cin;
    //assign sum = a ^ b ^ cin;
 //  assign cout = a&b | a&cin | b&cin;
endmodule

补码原码

题目链接
1)简述
原码: 用来转换对应进制.
反码: 二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换.(符号位不变)。
补码: 用来做数据的存储运算. 补码提出的根源是让计算机底层的实现减法操作(可以表达出一个数的正负)。
2)运算规则
(原码 反码 补码之间的转换 , 符号位不要动)
正数: 原码 = 反码 = 补码
负数: 原码 = 补码取反加1 给补码求原码
负数: 补码 = 原码取反加1 给原码求补码

12 +(- 15) = ? 
补码用来做数据的存储运算,因此先求12-15的补码
12的补码(=反码=原码):0000 1100(高位为0,表示正数)
-15的原码: 1000 1111 (高位为1,表示负数,转换为10进制时,高位的1不用进行换算) 
     反码: 1111 0000 (原码取反) 
     补码: 1111 0001 (反码加1)

补码做相加运算
 12的补码: 0000 1100
-15的补码: 1111 0001
         -------------
结果(补码): 1111 1101
补码再转换为原码(即补码的补码,同样做取反加1换算)
补码:   1111 1101(高位为1,表示负数,进行补码反码原码换算时是不变的)
反码:   1000 0010(补码取反)
原码:   1000 0011(反码加110进制: -3

卡诺图化简

题目链接
在这里插入图片描述

发布了16 篇原创文章 · 获赞 2 · 访问量 618

猜你喜欢

转载自blog.csdn.net/csdn_ggboy/article/details/104884378