【Verilog - 组合逻辑 - 基础2】3. 是非门

全则必缺,极则必反《吕氏春秋·不苟论·博志》
是是非非谓之知,非是是非谓之愚《荀子·修身》

1.0 介绍

是非的辩证是人生中不可不面临的经历,同样,是门(缓冲器)与非门的应用是在数字电路里不可不学习的基础知识!

1.1 非门

非门就如同荀子所言的:“非是,是非,谓之愚”。

01
10

在verilog,模拟的方法有三个。

1.1.1 非门 - 行为

module fei_xw(input jia, output yi);
	assign yi = ~jia;
endmodule

~就是非的功能。

1.1.2 非门 - 门

module fei_men(input jia, output yi);
	not mynot(yi, jia);
endmodule

可以用Verilog自带的not(output out, input in)来做模拟。

1.1.3 非门 - 电路

module fei_dl(input jia, output yi);
	nmos(yi, 0, jia);
	pmos(yi, 1, jia);
endmodule

可以用Verilog自带的nmos(inout drain, inout source, input gate)pmos(inout drain, inout source, input gate)来做模拟。
在电路模拟时,1,0就代表高低电压。

1.2 缓冲器(是门)

缓冲器(是门)就是把能好好的把是非分辩的出来。就是说,是就是是,非就是非。不怪荀子曰:“是是,非非,谓之知(智慧)”。

00
11

在verilog,模拟的方法有三个。

1.2.1 缓冲器 - 行为

module shi_xw(input jia, output yi);
	assign yi = jia;
endmodule

可见,缓冲器在行为上就是一个单纯的连接而已。

1.2.2 缓冲器 - 门

module shi_men(input jia, output yi);
	buf mybuf(yi, jia);
endmodule

可以用Verilog自带的buf(output out, input in)来做模拟。
也可以这样模拟,

module shi_men(input jia, output yi);
        wire zhong;
        not not1(zhong, jia);
        not not2(yi, zhong);
endmodule

module ceshi;
	reg jia;
	wire yi;
	shi_men dut(jia, yi);
	initial begin
	        jia = 1'b0;
	        #1;
	        $display("jia = %b, yi = %b", jia, yi);
	        $finish;
	end
endmodule

1.2.3 缓冲器 - 电路

module shi_dl(input jia, output yi);

	wire zhong;

	nmos(zhong, 0, jia);
	pmos(zhong, 1, jia);
	
	nmos(yi, 0, jia);
	pmos(yi, 1, jia);
endmodule

可见,缓冲器的电路模拟会更复杂一些,同常是用两个非门所构造的。

1.3 多个宽度的非门

1.3.1 非门 - 行为

module fei_xw #(parameter N = 1) (input [N-1:0] jia, output [N-1:0] yi);
        assign yi = ~jia;
endmodule

module ceshi;
        reg [5:0] jia;
        wire [5:0] yi;
        fei_xw #(6) dut(jia,yi);
        initial begin
                jia = 6'b100_101;
                #1;
                $display("jia = %b, yi = %b", jia, yi);
                $finish;
        end
endmodule

输出是,

liu2333hui@liu2333hui-PC:~/verilog/nihao$ epicsim fei_xw.v
jia = 100101, yi = 011010

1.3.2 非门 - 门

这里有一个小讨巧,得用systemverilog 里的generatefor语句。

module fei_xw #(parameter N = 1) (input [N-1:0] jia, output [N-1:0] yi);
        genvar i;
        generate 
                for (i = 0; i < N; i++) begin
                        not mynot(yi[i], jia[i]);
                end
        endgenerate
endmodule

module ceshi;
        reg [5:0] jia;
        wire [5:0] yi;
        fei_xw #(6) dut(jia,yi);
        initial begin
                jia = 6'b100_101;
                #1;
                $display("jia = %b, yi = %b", jia, yi);
                $finish;
        end
endmodule

结果是一样的,

liu2333hui@liu2333hui-PC:~/verilog/nihao$ epicsim -g2005-sv fei_xw.sv
jia = 100101, yi = 011010

注意,这里需要加一个-g2005-sv,代表我们现在在用systemverilog的语法了。

1.3.3 非门 - 电路

同样,可以用SystemVerilog来建模,

module fei_xw #(parameter N = 1) (input [N-1:0] jia, output [N-1:0] yi);
        genvar i;
        generate 
                for (i = 0; i < N; i++) begin
                        	nmos(yi[i], 0, jia[i]);
							pmos(yi[i], 1, jia[i]);
                end
        endgenerate
endmodule

module ceshi;
        reg [5:0] jia;
        wire [5:0] yi;
        fei_xw #(6) dut(jia,yi);
        initial begin
                jia = 6'b100_101;
                #1;
                $display("jia = %b, yi = %b", jia, yi);
                $finish;
        end
endmodule

效果,

liu2333hui@liu2333hui-PC:~/verilog/nihao$ epicsim -g2005-sv fei_dl.sv
jia = 100101, yi = 011010

1.4 参考

[1] https://www.runoob.com/w3cnote/verilog2-level-modeling.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值