添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 利用双输入端的nand门,用Verilog编写自己的与或非门,并用激励模块验证这些门的功能。

  • 与门,verilog实现,用三个与非门

    module my_add(
       output out,
       input a,
       input b
       wire w1,w2;
       nand na1(w1,a,b);
       nand na2(w2,a,b);
       nand na3(out,w1,w2);
       endmodule
    
  • RTL视图
    在这里插入图片描述

  • 仿真实现
    在这里插入图片描述

  • 仿真结果满足与门逻辑。
    在这里插入图片描述

  • 与门(第二种方式),Verilog实现,两个与非门

    module my_and(
    	output out,
    	input a,
    	input b
    wire w1;
    nand na1(w1,a,b);
    nand na2(out,w1,w1);
    endmodule
    
  • RTL视图
    在这里插入图片描述

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

  • 或门,verilog实现

    	//构建或门
    module my_or(
    	output out,
    	input a,
    	input b
    //输入短接
    wire w1,w2;
    nand (w1,a,a);
    nand (w2,b,b);
    nand (out,w1,w2);
    endmodule
    
  • 仿真验证
    在这里插入图片描述

  • 非门,就很简单啦,把与非门输入短接就行啦,就不一一验证了。本来不想写my_not的,结果第二题要用到,贴上其代码。
    在这里插入图片描述

  • 利用上题所定义的my_and,my_or,my_not,来构建一个异或门(xor),功能计算 z = x ˉ y + x y ˉ ,编写仿真信号对其测试。

  • verilog实现

    //综合my_and,my_or,my_not
    module my_xor(
    	output out,
    	input a,
    	input b
    //声明内部线网
    wire w1,w2,w3,w4;
    my_not my_not_1(w1,a);
    my_not my_not_2(w2,b);
    my_and my_and_1(w3,w1,b);
    my_and my_and_2(w4,w2,a);
    my_or my_or_1(out,w3,w4);
    endmodule
    
  • RTL视图
    在这里插入图片描述

  • 仿真设计

    // 仿真定义
    module my_xor_tb();
    reg x,y;
    wire z;
    my_xor my_xor_inst(z,x,y);
    initial
    begin
    	x=1'b0;
    	y=1'b1;
    	#10 	x=1'b0;
    			y=1'b0;
    	#1 $display("x=%b,y=%b,z=%b\n",x,y,z);
    	#10 	x=1'b0;
    			y=1'b1;
    	#1 $display("x=%b,y=%b,z=%b\n",x,y,z);	
    	#10 	x=1'b1;
    			y=1'b0;
    	#1 $display("x=%b,y=%b,z=%b\n",x,y,z);			
    	#10	x=1'b1;
    			y=1'b1;
    	#1 $display("x=%b,y=%b,z=%b\n",x,y,z);		
    endmodule
    
  • 仿真结果,满足异或门逻辑
    在这里插入图片描述

  • 懒得打字拉,题目如下 在这里插入图片描述

  • Verilog实现

    module my_fulladder(
    	output sum,
    	output c_out,
    	input  a,
    	input  b,
    	input  c_in
    wire a_1, b_1, c_in_1;
    wire s1, s2, s3, s4;
    wire c1, c2, c3;
    // 先实现等式中的非门,且用上面定义的线网连接
    not (a_1, a);
    not (b_1, b);
    not (c_in_1, c_in);
    // 实现等式中的sum
    and (s1,a,b,c_in);
    and (s2,a_1,b,c_in_1);
    and (s3,a_1,b_1,c_in);
    and (s4,a,b_1,c_in_1);
    or (sum,s1,s2,s3,s4);
    // 实现等式中的c_out
    and (c1,a,b);
    and (c2,b,c_in);
    and (c3,a,c_in);
    or (c_out,c1,c2,c3);
    endmodule
    
  • RTL视图
    在这里插入图片描述

  • 仿真实现

    module my_fulladder_tb();
    reg A,B,C_IN;
    wire C_OUT,SUM;
    my_fulladder my_fulladder_inst(SUM, C_OUT, A, B, C_IN);
    initial
    begin
    	A		=	1'b0;
    	B		=	1'b0;
    	C_IN	=	1'b0;	
    	A		=	1'b0;
    	B		=	1'b0;
    	C_IN	=	1'b1;
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);
    	A		=	1'b0;
    	B		=	1'b1;
    	C_IN	=	1'b0;	
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);
    	A		=	1'b0;
    	B		=	1'b1;
    	C_IN	=	1'b1;		
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);
    	A		=	1'b1;
    	B		=	1'b0;
    	C_IN	=	1'b0;	
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);
    	A		=	1'b1;
    	B		=	1'b0;
    	C_IN	=	1'b1;	
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);
    	A		=	1'b1;
    	B		=	1'b1;
    	C_IN	=	1'b0;	
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);
    	A		=	1'b1;
    	B		=	1'b1;
    	C_IN	=	1'b1;	
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);
    	A		=	1'b0;
    	B		=	1'b0;
    	C_IN	=	1'b0;	
    	#1 $display("A=%b,B=%b,C_IN=%b,SUM=%b,C_OUT=%b\n", A, B, C_IN, SUM, C_OUT);	
    endmodule
    
  • 仿真结果,满足设计要求
    在这里插入图片描述

  • 直接上图
    在这里插入图片描述

  • verilog实现

    module my_rs_latch(
    	output q,
    	output qbar,
    	input set,
    	input reset
    nor #(1) (q,reset,qbar);
    nor #(1) (qbar,q,set);
    endmodule
    
  • 仿真

    module my_rs_latch_tb();
    reg SET,RESET;
    wire Q,QBAR;
    my_rs_latch my_rs_latch_inst(Q,QBAR,SET,RESET);
    initial
    begin
    	SET=1'b0;
    	RESET = 1'b0;
    	SET=1'b0;
    	RESET = 1'b1;
    	SET=1'b1;
    	RESET = 1'b0;
    	SET=1'b1;
    	RESET = 1'b1;
    endmodule
    
  • 仿真结果,经过两个时间单位(2 ps),q发生改变
    在这里插入图片描述

  • 上图
    在这里插入图片描述
    在这里插入图片描述

  • 此多路选择器,当s为1的时候,输出in1;s为0的时候,输出in2。

  • verilog实现

    module my_mux2_to_1(
    	output out,
    	input in1,in2,
    	input s
    bufif1 #(1:3:5,2:4:6,3:5:7) buf1(out,in1,s);
    bufif0 #(1:3:5,2:4:6,3:5:7) buf0(out,in2,s);
    endmodule
      
    • 当s为0时,输出in2,当in2为1时,延时了3个时间单位后,in2为1
      在这里插入图片描述
    • 当s为0时,输出in2,当in2为0时,延时了4个时间单位后,in2为0
      在这里插入图片描述
    • 当s为1时,同理。
module Gate(S_in1,S_in2,Out_and,Out_nand,Out_or,Out_nor,Out_xnor,Out_xor,Out_buf,Out_not); input S_in1; input S_in2; output Out_and,Out_nand,Out_or,Out_nor,Out_xnor,Out_xor,Out_buf,Out_not; and(Out_and,S_in1,S_in2); //与门 nand(Out_nand,S_in1,S_in2.
硬件描述语言:Hardware Description Language HDL 综合:用代码的形式描述硬件。最终在硬件电路上实现功能。verilog描述出硬件功能后需要使用综合器对verilog代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路(网表)。 实质:代码->电路 **仿真:**通过仿真软件进行仿真测试,检测出BUG并解决 仿真需要测试程序(产生激励信号),verilog绝大多数须发都是为了仿真测试使用,少部分用于电路设计 可综合设计:以仿真测试为目的的程序,不能与实际电路对应
Verilog HDL的结构描述方式 结构描述方式就是将硬件电路描述成一个分级子 块系统,通过逐层调用这些 块构成功能复杂的数字逻辑电路和系统的一种描述方式。根据所调用子 块的不同抽象级别,可以将 块的结构描述方式分成如下三类: 块级建 :通过调用由用户设计生成的低级子 块来对硬件电路结构进行说明,这种情况下由低级 块的实例组成。 门级建 :通过调用Verilog HDL内部的基本门级元件来对硬件电路的结构进行说明,这种情况下 块将由基本门级元件的实例组成。 开关级建 :通过调用Verilog
2. 在Quartus II 环境下,运用Verilog HDL 语言进行编程开发,并完成对电路工作情况的仿真 拟; 3. 完成配置程序的下载,并在开发板上对程序进行功能验证。 二、 实验过程步骤 1、设计 块1:二输入与非门nand_gate a. 块功能要求 输入信号a,b,实现与非门功能,输出y=~(a&b)。 b.实验步骤 (1)利用wizard新...
1、基本逻辑运算、仅用与非或仅用与或非、最小项之和、最大项之积、卡诺图化简、逻辑门的mos管组成,笔试常出现 2、setup、hold time分析,需深入理解,而不是简单会计算,笔试甚至可能出几道问答题 3、FSM(二段三段式),百度面试中问过 4、CDC(快到慢及慢到快): 两级触发器,FIFO(同步异步),握手,笔试会考,面试基本都会问,问得很深,需彻底弄懂,要能写出代码 5、串并转换 6、分频电路(奇数分频,偶数分频),非常基础,华为面试中出现过,不会基本直接挂 7、乒乓buffer 8、超前进位加
Verilog是一种硬件描述语言,可以用于设计和建 数字电路。在Verilog中, 门级建 是一种基本的建 方法,它使用逻辑门和连接线来描述电路的行为。 门级建 使用逻辑门(如AND、OR、NOT等)来表示电路中的逻辑功能。每个逻辑门都有输入和输出端口,通过连接线将它们连接起来。通过定义逻辑门的输入信号和输出信号之间的逻辑关系,可以描述整个电路的行为。 以下是一个使用Verilog 门级建 的简单例子,表示一个AND门的行为: ```verilog module and_gate(input a, b, output y); assign y = a & b; endmodule 在这个例子中,`and_gate` 块有两个输入 `a` 和 `b`,以及一个输出 `y`。`assign` 语句定义了 `y` 的逻辑关系,即 `y` 等于 `a` 和 `b` 的逻辑与运算结果。 通过类似的方式,你可以使用Verilog 门级建 来描述其他逻辑门(如OR、NOT等)以及更复杂的电路结构。 门级建 是一种简单且直观的建 方法,适用于小型数字电路的设计与验证。