我是靠谱客的博主 激动铃铛,最近开发中收集的这篇文章主要介绍Verilog——多路选择器逻辑设计,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

二选一逻辑

模块fn_sw功能:
当sel为0时y是a和b的与;当sel为1时y是a和b的异或。

Verilog代码:

使用assign语句块实现二选一功能

module fn_sw(
            a,
            b,
            sel,
            y
            );
//定义端口属性
input        a;
input        b;
input        sel;
output        y;

//输入输出的关系

assign        y=sel?(a^b):(a&b);

//这里的问号冒号语句,含义是:如果sel为1,则y等于(a^b),否则等于(a&b)
//问号冒号语句实现二选一


endmodule

使用always语句块实现二选一功能:

module fn_sw(
            a,
            b,
            sel,
            y
            );
//定义端口属性
input        a;
input        b;
input        sel;
output        y;

reg           y;    //always语句块里赋值的变量需要是reg型

//always语句块
always@(a or b or sel)   //@后面的(a or b or sel)是敏感变量,组合逻辑输入,里面的输入变量要写全
begin
    if(sel==1)begin    //if else语句 实现二选一
        y<=a^b;        //reg型变量赋值用带箭头的等号
    end
    else begin
        y<=a&b;         //reg型变量赋值用带箭头的等号
    end
end


endmodule

测试代码testbench

//testbench of fn_sw
module fn_sw_tb;
reg						a,b,sel;
wire					y;
fn_sw 		fn_sw(
						.a(a),
						.b(b),
						.sel(sel),
						.y(y)
				);//异名例化,前面加.
//改变输入
initial begin
							a<=0;b<=0;sel<=0;
					#10     a<=0;b<=0;sel<=1;
					#10     a<=0;b<=1;sel<=0;
					#10     a<=0;b<=1;sel<=1;
					#10     a<=1;b<=0;sel<=0;
					#10     a<=1;b<=0;sel<=1;
					#10     a<=1;b<=1;sel<=0;
					#10     a<=1;b<=1;sel<=1;
					#10     $stop;
end

endmodule

多路选择逻辑

模块fn_sw功能:
当sel为00时y是a和b的与;

当sel为01时Y是a和b的或;

当sel为10时y是a和b的异或;

当sel为11时y是a和b的同或;

Verilog代码:

使用case语句实现多路选择功能

`timescale 1ns/10ps
module fn_sw(
            a,
            b,
            sel,
            y
            );
//定义端口属性
input        a;
input        b;
input        sel;
output        y;

reg           y;    //always语句块里赋值的变量需要是reg型

//always语句块
always@(a or b or sel)  
begin
   case(sel)                 //case语句块
    2'b00:begin y<=a&b;end   //2'b指的是2bit变量
    2'b01:begin y<=a|b;end
    2'b10:begin y<=a^b;end
    2'b11:begin y<=~(a^b);end
    endcase
end

endmodule

测试代码testbench

//-----testbench of fn_sw_4
module fn_sw_4_tb;
reg[3:0]       absel;
wire           y;

fn_sw_4 fn_sw_4(
				.a(absel[0]),
				.b(absel[1]),
				.sel(absel[3:2]),
				.y(y)
				);

intial begin
				  absel<=0;//absel赋初值
			#200  $stop;//过200ns结束Verilog系统任务,仿真结束
end
always #10 absel<=absel+1;//每过10ns对absel进行加一
//always #遍历逻辑值

endmodule

最后

以上就是激动铃铛为你收集整理的Verilog——多路选择器逻辑设计的全部内容,希望文章能够帮你解决Verilog——多路选择器逻辑设计所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部