数字IC Verilog笔试题------牛客网(一)

1.四选一多路器

制作一个四选一的多路选择器,要求输出定义上为线网类型

     状态转换:
           d0    11
           d1    10
           d2    01
           d3    00

`timescale 1ns/1ns
module mux4_1(
input [1:0] d1,d2,d3,d4,
input [1:0] sel,
output [1:0] mux_out
);
    reg mux_out
    always@(*)
        case(sel)
            2'b00:mux_out=d1;
            2'b01:mux_out=d2;
            2'b10:mux_out=d3;
            2'b11:mux_out=d4;
        endcase
    end
endmodule

2.异步复位的串联T触发器 

题目描述:           

用verilog实现两个串联的异步复位的T触发器的逻辑,结构如图:

信号示意图:

波形示意图:

`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q  
);
//*************code***********//
 reg data_1;
    always @ (posedge clk or negedge rst) begin
        if (!rst)
            data_1 <= 1'b0;
        else
            data_1 <= data ^ data_1 ;
    end
     
    always @ (posedge clk or negedge rst) begin
        if (!rst)
            q <= 1'b0;
        else
            q <= data_1 ^ q;
    end

//*************code***********//
endmodule

3.奇偶校验 

题目描述:           

在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验,0输出偶校验)

信号示意图:

波形示意图:

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//

wire odd;
assign odd = ^bus;
assign check = sel?odd:~odd;

//*************code***********//
endmodule

4.移位运算与乘法  

题目描述:           

已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)

信号示意图:

波形示意图:

`timescale 1ns/1ns
module multi_sel(
input [7:0]d ,
input clk,
input rst,
output reg input_grant,
output reg [10:0]out
);
//*************code***********//
reg[1:0]   state;
reg[7:0]   d1;
 
always@ (posedge clk or negedge rst) begin
   if(~rst) begin
   input_grant <= 0; out <= 0; state <= 0; d1 <= 0;
   end
   else begin
     if (input_grant == 1) 
     input_grant <= 0;
     else input_grant <= input_grant;
       case(state)
             0://d乘1,用d1将d的值锁存进去
             begin
             out <= d;
             d1 <= d;
             input_grant <= 1;
             state <= 1;
             end
              
             1://d乘3
             begin
             out <= d1 + {d1,1'b0};
             state <= 2;
             end
              
             2://d乘7
             begin
             out <= d1 + {d1,1'b0} + {d1,2'b00};
             state <= 3;
             end
              
             3://d乘8
             begin
             out <= {d1,3'b000};
             state <= 0;
             end
           
       endcase
   end
 
end

//*************code***********//
endmodule

5.位拆分与运算 

 题目描述:           

现在输入了一个压缩的16位数据,其实际上包含了四个数据[3:0][7:4][11:8][15:12],现在请按照sel选择输出四个数据的相加结果,并输出valid_out信号(在不输出时候拉低)

0:   不输出且只有此时的输入有效 

1:输出[3:0]+[7:4]

2:输出[3:0]+[11:8]

3:输出[3:0]+[15:12]

信号示意图:

波形示意图:

`timescale 1ns/1ns

module data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,

output [4:0]out,
output validout
);
//*************code***********//
reg [15:0]data_temp;
    always@(posedge clk or negedge rst)
        if(!rst)begin
            out<=5'd0;
            validout<=1'b0;
            data_temp<=15'd0;
        end
        else case(sel)
            0:
                begin
                    data_temp<=d;
                    out[4:0]<=5'd0;
                    validout<=1'b0;
                end
            1:
                begin
                    validout<=1'b1;
                    out[4:0]<=data_temp[3:0]+data_temp[7:4];
                end
            2:
                begin
                    validout<=1'b1;
                    out[4:0]<=data_temp[3:0]+data_temp[11:8];
                end
            3:
                begin
                    validout<=1'b1;
                    out[4:0]<=data_temp[3:0]+data_temp[15:12];
                end
            default:
                begin
                    validout<=1'b0;
                    out[4:0]<=5'd0;
                end
        endcase
//*************code***********//
endmodule

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值