FPGA入门1:半加器,多路选择器Verilog描述

1、半加器
Verilog描述:

module h_adder(A,B,SO,CO) ;
    input A,B;
    output SO,CO;
    assign SO = A ^ B ;
    assign CO = A & B ;
endmodule

assign并行语句,同时执行,与语句的前后顺序无关
Verilog规定所有关键词必须小写



2、多路选择器
(1)always语句

module MUX41a(a,b,c,d,s1,s0,y) ;
    input   a,b,c,d,s1,s0;
    output     y;
    reg    y;
    always@(a or b or c or d or s1 or s0)
        begin : MUX41a     //块语句开始
            case({s1,s0})
                2'b00: y<=a;
                2'b01: y<=b;
                2'b10: y<=c;
                2'b11: y<=d;
                default: y<=a;
            endcase
        end
endmodule

reg型变量用于定义特定类型的变量(寄存器型变量),只用于always过程语句中
wire网线型用于assign引导的幅值语句

任何变量可能有4种不同的逻辑状态:

  • 0
  • 1
  • z或Z (高阻态)
  • x或X (不确定)

符号” <= “是赋值符号,只能英语顺序语句(always),” = “只能用在assign引导的并行语句中。

(2)assign语句表述4选一

module MUX41a(a,b,c,d,s1,s0,y) ;
    input  a,b,c,d,s1,s0;
    output  y;
    wire [1:0] SEL;
    wire  AT,BT,CT,DT;
    assign  SEL = {s1,s0};     //对s1,s0进行并位操作

    assign  AT  = (SEL==2'D0);  //逻辑判断,SEL成立,AT为1,反之为0
    assign  BT  = (SEL==2'D1);
    assign  CT  = (SEL==2'D2);
    assign  DT  = (SEL==2'D3);

    assign  y = (a&AT)|(b&BT)|(c&CT)|(d&DT);

endmodule

数字表达:b二进制,D十进制,O八进制,H十六进制
wire可以直接表达assign语句。

(3)wire语句表达4选一

module MUX41a(a,b,c,d,s1,s0,y) ;
    input a,b,c,d,s1,s0;
    output y;
    wire AT = s0 ? d : c ;
    wire BT = s0 ? b : a ;
    wire y = (s1 ? AT : BT) ;
endmodule

(4)条件语句表述

module MUX41a(a,b,c,d,s1,s0,y);
    input  a,b,c,d,s1,s0;
    output y;
    reg[1:0] SEL;
    reg  y;
    always@(a,b,c,d,SEL)
        begin 
            SEL = {s1,s0};
            if(SEL==0) y=a;
            else if(SEL==1) y=b;
            else if(SEL==2) y=c;
            else if(SEL==3) y=d;
        end
endmodule

if条件语句,顺序执行语句块(begin-end)

你可能感兴趣的:(FPGA)