📜  门| GATE CS 2011 |第55章(1)

📅  最后修改于: 2023-12-03 15:28:37.595000             🧑  作者: Mango

门 | GATE CS 2011 |第55章

本篇文章介绍了GATE CS 2011年第55章的相关内容,主要涉及以下几个方面:

  1. 组合逻辑电路:介绍了组合逻辑电路的基本概念,如AND、OR、NOT等逻辑门的功能原理以及电路图示例,并提供了实现加法器、多路选择器等电路的方法。

  2. 时序逻辑电路:介绍了时序逻辑电路的基本概念,如RS-Flipflop、D-Flipflop等电路的功能原理以及电路图示例,并提供了实现计数器等电路的方法。

  3. 有限状态机:介绍了有限状态机的基本概念和状态转移图的绘制方法,并提供了实现特定功能的状态机的方法。

  4. Verilog HDL:介绍了Verilog HDL的基本语法和模块组成结构,并提供了实现简单电路和状态机的代码示例。

  5. FPGA:介绍了FPGA的基本概念和构造,以及VHDL编程和Quartus工具的使用方法,并提供了实现简单电路和状态机的代码示例。

## 1. 组合逻辑电路

组合逻辑电路是由基本的逻辑门(AND、OR、NOT)组成的电路,根据这些逻辑门的功能可以实现各种电路,如加法器、多路选择器等。下面是一个4位加法器的电路图示例:

```verilog
module adder(a, b, cin, sum, cout);
input [3:0] a, b;
input cin;
output [3:0] sum;
output cout;

wire c1, c2, c3;
//第一位
full_adder add1(.a(a[0]), .b(b[0]), .cin(cin), .sum(sum[0]), .cout(c1));
//第二位
full_adder add2(.a(a[1]), .b(b[1]), .cin(c1), .sum(sum[1]), .cout(c2));
//第三位
full_adder add3(.a(a[2]), .b(b[2]), .cin(c2), .sum(sum[2]), .cout(c3));
//第四位
full_adder add4(.a(a[3]), .b(b[3]), .cin(c3), .sum(sum[3]), .cout(cout));

endmodule
## 2. 时序逻辑电路

时序逻辑电路是由触发器(Flipflop)等组成的电路,可以实现存储器、计数器等功能。下面是一个4位计数器的电路图示例:

```verilog
module counter(clk, reset_n, q);
input clk, reset_n;
output [3:0] q;

wire [3:0] next_state;
assign next_state = q + 1;

reg [3:0] state;
always @(posedge clk or negedge reset_n) begin
  if (!reset_n) begin
    state <= 4'b0000;
  end else begin
    state <= next_state;
  end
end

assign q = state;

endmodule
## 3. 有限状态机

有限状态机是由状态、转移和输出组成的电路,可以实现自动控制器等功能。下面是一个简单的循环状态机的状态转移图:

```mermaid
graph TD;
start(false) --> State1(false)
State1(false) --> State2(false)
State2(false) --> State3(false)
State3(false) --> start(false)

下面是实现这个状态机的Verilog代码:

module fsm(clk, reset_n, out);
input clk, reset_n;
output out;

reg [1:0] state;
parameter S1 = 2'b00, S2 = 2'b01, S3 = 2'b10;
always @(posedge clk or negedge reset_n) begin
  if (!reset_n) begin
    state <= S1;
  end else begin
    case (state)
      S1: state <= S2;
      S2: state <= S3;
      S3: state <= S1;
    endcase
  end
end

assign out = (state == S1) ? 1'b1 : 1'b0;

endmodule
## 4. Verilog HDL

Verilog HDL是一种硬件描述语言,可以用来描述电路的行为。它包含了模块、端口、输入输出、变量、运算符等一系列元素。下面是一个实现4位加法器的Verilog HDL代码:

```verilog
module adder(a, b, cin, sum, cout);
input [3:0] a, b;
input cin;
output [3:0] sum;
output cout;

wire c1, c2, c3;

assign sum[0] = a[0] ^ b[0] ^ cin;
assign c1 = (a[0] & b[0]) | (a[0] & cin) | (b[0] & cin);
assign sum[1] = a[1] ^ b[1] ^ c1;
assign c2 = (a[1] & b[1]) | (a[1] & c1) | (b[1] & c1);
assign sum[2] = a[2] ^ b[2] ^ c2;
assign c3 = (a[2] & b[2]) | (a[2] & c2) | (b[2] & c2);
assign sum[3] = a[3] ^ b[3] ^ c3;
assign cout = c3;

endmodule
## 5. FPGA

FPGA是一种可编程逻辑器件,可以用来实现各种电路。在FPGA编程中,一般使用VHDL语言来描述电路的行为,使用Quartus工具来编译和下载。下面是一个实现4位计数器的VHDL代码:

```vhdl
library ieee;
use ieee.std_logic_1164.all;

entity counter is
  port (clk, reset_n : in std_logic;
        q : out std_logic_vector(3 downto 0));
end entity counter;

architecture rtl of counter is
begin
  process (clk, reset_n) is
    variable state : std_logic_vector(3 downto 0) := "0000";
  begin
    if reset_n = '0' then
      state := (others => '0');
    elsif clk'event and clk = '1' then
      state := state + 1;
    end if;
    q <= state;
  end process;
end architecture rtl;