嵌入式系统应用开发学习笔记(四)

本文详细介绍了使用Verilog进行门电路、组合逻辑电路和时序逻辑电路的设计,包括与门、或非门、异或非门、半加器、全加器、选择器、D触发器、8位D触发器、可复位D触发器及锁存器的实现。通过在线编程网站,可以即时验证和分析代码,并提供了相关设计代码及结果展示。
摘要由CSDN通过智能技术生成

Verilog编程巩固练习

在线编程网站的基本使用方法

Verilog在线编程网站

编程界面就在主页面上
在这里插入图片描述

在下方有各种元件的选择框,点进去就可以看到对应的用法和编程框,写入程序提交后,网站会自动将你的答案与正确答案对比纠错,或用语句给出波形图。

在这里插入图片描述

一、门电路

1.1 与门

  • 公式:
    Y = A + B Y=A+B Y=A+B

  • 设计代码:

module top_module( 
    input a, 
    input b, 
    output out );
     assign out=a&b;
endmodule
  • 结果:
    在这里插入图片描述

1.2 或非门

  • 公式:
    Y = A + B ‾ Y=\overline{A+B} \\ Y=A+B

  • 设计代码:

module top_module( 
    input a, 
    input b, 
    output out );
    assign out=!(a||b);
endmodule
  • 结果:
    *在这里插入图片描述

1.3 异或非门

  • 公式:

Y = A ⊕ B ‾ Y=\overline{A \oplus B} \\ Y=AB
等同于
Y = A ⊙ B Y=A \odot B Y=AB

  • 设计代码:
module top_module( 
    input a, 
    input b, 
    output out );
    assign out= !((!a & b) | (a & !b));
endmodule

  • 结果:
    在这里插入图片描述

二、组合逻辑电路

2.1 半加器

  • 公式:
    S = A ‾ B + A B ‾ C = A B S = \overline{A} B+A\overline{B}\\ \\ C=AB S=AB+ABC=AB
  • 真值表:
被加数加数B和数S进位
0000
0110
1010
1101
  • 设计代码:
module top_module( 
    input a, b,
    output cout, sum );
assign cout=a&b;
assign sum=a^b;
endmodule
  • 结果:
    在这里插入图片描述

2.2 全加器

  • 公式:
    (一位全加器)
    S i = A i ⊕ B i ⊕ C i − 1 C i = A i B i + C i − 1 ( A i + B i ) S_i = A_i \oplus B_i \oplus C_{i-1} \\ C_i=A_i B_i+C_{i-1}(A_i+B_i) \\ Si=AiBiCi1Ci=AiBi+Ci1(Ai+Bi)
    第二个表达式也可用一个异或门来代替或门对其中两个输入信号进行求和:
    C i = A i B i + C i − 1 ( A i ⊕ B i ) C_i=A_i B_i+C_{i-1}(A_i \oplus B_i) Ci=AiBi+Ci1(AiBi)
  • 真值表:
AiBiCi-1SiCi
00000
00110
01010
01101
10010
10101
11001
11111
  • 设计代码:
module top_module( 
    input a, b, cin,
    output cout, sum );
   assign sum  = a^b^cin;
   assign cout = (a&b)|(a&cin)|(b&cin);
endmodule
  • 结果:
    在这里插入图片描述

2.3 选择器

  • 公式:
    o u t = B s e l ‾ + A s e l out = B \overline{sel}+Asel\\ out=Bsel+Asel
  • 真值表:
ABselout
0000
0100
1000
1101
0010
0110
1011
1111
  • 设计代码:
module top_module( 
    input a, b, sel,
    output out ); 
    assign out=(sel)?b:a;
endmodule

  • 结果:
    在这里插入图片描述

三、时序逻辑电路

3.1 D触发器

  • 公式:
    Q n + 1 = D Q_{n+1}=D Qn+1=D
  • 功能表:
DCLKQQn
0上升沿01
1上升沿10
×0保持保持
×1保持保持
  • 设计代码:
module top_module (
    input clk,    // Clocks are used in sequential circuits
    input d,
    output reg q );//
    // Use a clocked always block
    //   copy d to q at every positive edge of clk
    //   Clocked always blocks should use non-blocking assignments
    always@(posedge clk) begin
        q <= d;
    end
endmodule

  • 结果:
    在这里插入图片描述

3.2 8位D触发器

8位D触发器只需改变D触发器a和b的位宽即可,原理一致,改变代码中a和b的位宽即可

  • 设计代码:
module top_module (
    input clk,
    input [7:0] d,
    output [7:0] q
);
always@(posedge clk) begin
    	q <= d;
    end
endmodule

  • 结果:
    在这里插入图片描述

3.3 可复位的D触发器

在D触发器的实际使用过程中,有时候需要一个复位端(也称清零端)
电路上电时,电路的逻辑处于不定状态,复位脉冲的到来将电路初始化为Q=0的状态。随后,在时钟的控制下输出端D的数据在每个时钟上升沿被置到输出端Q。

  • 设计代码:
module top_module (
    input clk,
    input reset,            // Synchronous reset
    input [7:0] d,
    output [7:0] q
);
always@(posedge clk) begin
        if(reset)
            q <= 8'b0;
        else
    	    q <= d;
    end
endmodule


  • 结果:
    在这里插入图片描述

3.4 锁存器

  • 设计代码:
module top_module (
    input d, 
    input ena,
    output q);
always@(*)begin
        if(ena)begin
            q<=d;
        end
    end

endmodule

在这里插入图片描述

有警告信息:大意是告知我们创建了一个锁存器,锁存器会占用大量资源,系统有必要确实我们是不是有意为之

安装 Robei并完成练习

1、安装

在这里插入图片描述

2、注册

Robei官网 注册
在这里插入图片描述
注册好后登录
在这里插入图片描述
一般在注册时填写的信息为学生/Student后,官方会在几天后发给你序列号,由于还没有收到,暂无法继续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值