• 野火A7学习第三次(组合逻辑相关)


    1 多路选择器

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

    2 实战演练(二选一多路选择器)

    2.1 设计规划

    1 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.2 波形绘制

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

    2.3 代码编写编译

    module mux2_1
    ( 
    	input wire in_1,
    	input wire in_2,
    	input wire sel,
    	output reg output); 
    	
    	// 1 always 与 if else 相结合
    	always @(*)  being // 相当于(sel, in_1, in_2)
    		if(sel == 1'b1) begin
    			out = in_1;
    		end
    		else begin
    			out = in_2;
    		end
    	end
    	// 2 always 与 case 相结合
    	always @(*) begin
    		case (sel)
    			1'b1:		out = in_1;
    			1'b0:		out = in_0;
    			default: 	out = in_1;
    		endcase
    	end
    
    	// 3 out 组合逻辑输出选择结果
    	assign out = (sel == 1'b1) ? in1: in2;
    
    	
    
    endmodule
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    tb_module

    'timescale 1ns/1ns
    
    module tb_mux_2_1();
    
    // 仿真文件对输入信号的模拟
    reg in_1;
    reg in_2;
    reg sel;
    
    wire output;
    
    initial begin
    	in_1 <= 1'b0;
    	in_2 <= 1'b0;
    	sel <= 1'b0;	
    end 
    
    always #10 in_1 <= {$random} % 2;  // 每隔10ns对in_1进行赋值,有可能是0或者1
    always #10 in_2 <= {$random} % 2;  // 每隔10ns对in_2进行赋值,有可能是0或者1
    always #10 sel <= {$random} % 2;  // 每隔10ns对sel进行赋值,有可能是0或者1
    
    initial begin
    	$timeformat(-9, 0, "ns", 6); // 小数点后面的位数
    	$monitor("@time %t:in_1=%b, in_2=%b, sel=%b, out=%b", $time, in_1, in_2, sel, out);
    end
    
    
    // 实例化
    mux2_1 mux2_1_inst
    (
    	.in_1(in_1);
    	.in_2(in_2);
    	.sel(sel);
    	.out(out);
    );
    
    endmodule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    2.4 波形仿真和对比

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

    2.5 绑定管教和布局布线

    在这里插入图片描述
    方式2
    在这里插入图片描述
    在这里插入图片描述

    2.6 上版验证通过

    在这里插入图片描述

    3 译码器

    在这里插入图片描述

    4 实战演练(译码器)

    实现38译码器,按键输入,3个按键,8个LED灯。

    4.1 设计规划

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

    4.2 波形绘制

    在这里插入图片描述

    4.3 代码编写和编译

    module decoder
    (
    	input wire in_1,
    	input wire in_2,
    	input wire in_3,
    	ouput reg [7:0]out  //  always语句赋值肯定是reg型 assign语句赋值一定是wire型
    );
    
    // 方式1 if else 会有优先级
    always@(*) // 组合逻辑
    	if({in_1,in_2,in_3} == 3'b0000)
    		out = 8'b0000_0001;
    	else if({in_1,in_2,in_3} == 3'b0001)
    		out = 8'b0000_0010;
    	...
    	else
    		out = 8'b0000_0001;
    
    // 方式2 case 在任何时候都不会存在优先级,只判断case中的条件
    always@(*) // 组合逻辑
    	case({in_1,in_2,in_3})
    		3'b000: out = 8'b0000_0001;
    		...
    		default: out = 8'b0000_0001;
    	endcase
    
    endmodule
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    if else
    在这里插入图片描述
    case
    在这里插入图片描述
    在这里插入图片描述

    4.4 逻辑仿真和波形对比

    `timescale 1ns/1ns
    
    module tb_decoder();
    
    // 使用always 和initial
    reg in_1;
    reg in_2;
    reg in_3;
    
    wire [7:0] 	out;
    
    initial begin
    	in_1 <= 1'b0;
    	in_2 <= 1'b0;
    	in_3 <= 1'b0;
    end
    
    always #10 in_1 <= {$random} % 2;
    always #10 in_2 <= {$random} % 2;
    always #10 in_3 <= {$random} % 2;
    
    initial begin
    	$timeformat(-9, 0, "ns", 6); // 小数点后面的位数
    	$monitor("@time %t:in_1=%b, in_2=%b, in_3=%b, out=%b", $time, in_1, in_2, in_3, out);
    end
    
    
    
    decoder decoder_inst
    (
    	.in_1(in_1),
    	.in_2(in_2),
    	.in_3(in_3),
    	.out(out)  //  always语句赋值肯定是reg型 assign语句赋值一定是wire型
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

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

    4.5 绑定管教分析综合

    4.6 上板测试

    5 半加器

    5.1 理论学习

    在这里插入图片描述
    使用按键和LED灯实现

    5.2 实战演练

    5.2.1 设计规划

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

    5.2.2 波形绘制

    1 模块框图
    在这里插入图片描述
    2 真值表
    在这里插入图片描述
    3 波形图
    在这里插入图片描述

    5.2.3 代码编写和编译

    module half_adder
    (
    	input wire in_1,
    	input wire in_2,
    	
    	ouput wire sum,
    	ouput wire count
    );
    
    assign {count, sum} = in_1 + in_2;
    
    endmodule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    仿真文件编写:

    `timescale 1ns/1ns
    
    module tb_half_adder();
    
    reg in_1;
    reg in_2;
    
    wire sum;
    wire count;
    
    initial begin
    	in_1 <= 1'b0;
    	in_2 <= 1’b0;
    end
    
    always #10 in_1 <= {$random} % 2;
    always #10 in_2 <= {$random} % 2;
    
    initial begin
    	$timeformat(-9, 0, "ns", 6); // 小数点后面的位数
    	$monitor("@time %t:in_1=%b, in_2=%b, count=%b, sum=%b", $time, in_1, in_2, count, sum);
    end
    
    half_adder half_adder_inst
    (
    	.in_1(in_1),
    	.in_2(in_2),
    	.sum(sum),
    	.count(count)  //  always语句赋值肯定是reg型 assign语句赋值一定是wire型
    );
    
    endmodule
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    5.2.4 波形仿真和对比

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

    5.2.5 绑定管教分析综合

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

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

    5.2.6 上板测试

    在这里插入图片描述

  • 相关阅读:
    java毕业设计Web产品管理系统源码+系统+数据库+lw文档+调试运行
    【优选算法系列】第一节.滑动窗口(209. 长度最小的子数组和3. 无重复字符的最长子串)
    题目 1058: 二级C语言-求偶数和
    学习java的第二十四天。。。(泛型、Collections、枚举、包装类)
    网工记背配置基本命令(5)----SNMP配置
    一文熟悉redis安装和字符串基本操作
    基于RocketMQ实现分布式事务
    每日一句 代码
    实例解读丨关于GaussDB ETCD服务异常
    帝国cms后台登录系统限制次数,60分钟过后重新登录解决办法
  • 原文地址:https://blog.csdn.net/qq_30093417/article/details/126392343