HDLBits Practice-Basic Gates-Multiplexers

HDLBits Practice

1.Gatesv : out_both,out_any,out_different

You are given a four-bit input vector in[3:0]. We want to know some relationships between each bit and its neighbour.

module top_module( 
    input [3:0] in,
    output reg[2:0] out_both,
    output reg[3:1] out_any,
    output reg[3:0] out_different );

	integer i;
	always@(*)begin
		for(i = 0; i < 4 ;i = i + 1) begin
			if(i<3)
				if(in[i] == 1 && in[i+1] == 1) 
					out_both[i] = 1'b1;
				else
					out_both[i] = 1'b0;
			else	
				out_both = out_both;
            if(i != 0)
                if(in[i] == 1 || in[i-1] == 1)
					out_any[i] = 1'b1;
				else
					out_any[i] = 1'b0;
			else
				out_any = 0;
			if(i == 3)
				if(in[3] != in[0])
                    out_different[3] = 1'b1;
				else
                    out_different[3] = 1'b0;
			else
				if(in[i] != in[i+1]) 
					out_different[i] = 1'b1;
				else
					out_different[i] = 1'b0;
				
		end
	end
endmodule

2.Gatesv100

ou are given a 100-bit input vector in[99:0]. We want to know some relationships between each bit and its neighbour.

module top_module( 
    input [99:0] in,
    output [98:0] out_both,
    output [99:1] out_any,
    output [99:0] out_different );

	integer i;
	always@(*)begin
		for(i = 0; i < 100 ;i = i + 1) begin
			if(i<99)
				if(in[i] == 1 && in[i+1] == 1) 
					out_both[i] = 1'b1;
				else
					out_both[i] = 1'b0;
			else	
				out_both = out_both;
			if(i>0)
				if(in[i] == 1 || in[i-1] == 1)
					out_any[i] = 1'b1;
				else
					out_any[i] = 1'b0;
			else
				out_any = out_any;
			if(i == 99)
				if(in[99] != in[0])
					out_different[99] = 1'b1;
				else
					out_different[99] = 1'b0;
			else
				if(in[i] != in[i+1]) 
					out_different[i] = 1'b1;
				else
					out_different[i] = 1'b0;
				
		end
	end
endmodule

3.Mux2to1v :100-bit wide

Create a 100-bit wide, 2-to-1 multiplexer. When sel=0, choose a. When sel=1, choose b.

module top_module( 
    input [99:0] a, b,
    input sel,
    output [99:0] out );
	
	genvar i;
	generate 
		for(i = 0; i<100 ;i = i+1) begin: mux2_1
			mux2_1 mux2_1_inst( .a(a[i]), .b(b[i]), .sel(sel),.out(out[i]) ); 
		end
	endgenerate
	
endmodule

module mux2_1(
    input a, b, sel,
    output out ); 
	
assign out = sel ? b: a;

endmodule
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值