【HDLbits答案】Verilog Language-Modules:Hierarchy

初学FPGA 时就知道了HDLbits(https://hdlbits.01xz.net/wiki/Main_Page),上去练了二三十道题之后觉得有些简单,又懒得看英文,就放弃了。现在发现自己的基础太差,决定继续做做上面的题,并将自己的答案分享出来。

在CSDN上有人给出了完整答案(https://blog.csdn.net/wangkai_2019/article/details/106664283),但我发现他有些答案没有按照题目要求写,所以在此贴出自己作为一个新手,基本按照要求写出的代码。

由于前几十道题的答案没有保存,题目也特别简单,所以这次从目录 Verilog Language-Modules:Hierarchy 开始分享,以后有空边做边分享,如果有任何错误或疑问,欢迎评论交流

Module shift

module topmodule(
    input     clk    , 
    input     d    , 
    output     q
);

wire    q1,q2;

my_dff my_dff_inst1(
    .clk     (clk),
    .d        (d),
    .q        (q1)
);

my_dff my_dff_inst2(
    .clk     (clk),
    .d        (q1),
    .q        (q2)
);

my_dff my_dff_inst3(
    .clk     (clk),
    .d        (q2),
    .q        (q)
);

endmodule

Module shift8

module top_module ( 
    input             clk    , 
    input     [7:0]     d    , 
    input     [1:0]     sel    , 
    output     [7:0]     q 
);
wire [7:0] q1,q2,q3;

always @(*)begin
    case (sel)
        2'b00:q <= d;
        2'b01:q <= q1;
        2'b10:q <= q2;
        2'b11:q <= q3;
    endcase

end 

my_dff8 my_dff8_inst1(
    .clk    (clk),
    .d      (d),
    .q      (q1)
);

my_dff8 my_dff8_inst2(
    .clk    (clk),
    .d      (q1),
    .q      (q2)
);

my_dff8 my_dff8_inst3(
    .clk    (clk),
    .d      (q2),
    .q      (q3)
);

endmodule

Module add

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);

wire cout1;

add16 add16_inst1(
    .a        (a[15:0]),
    .b      (b[15:0]),
    .cin    (1'b0),
    
    .cout    (cout1),
    .sum    (sum[15:0])
);

add16 add16_inst2(
    .a        (a[31:16]),
    .b      (b[31:16]),
    .cin    (cout1),
    
    .cout    (),
    .sum    (sum[31:16])
);
endmodule

Module fadd

module top_module (
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
wire cout;
add16 add16_inst1(
    .a        (a[15:0]),
    .b        (b[15:0]),
    .cin    (1'b0),
    .sum    (sum[15:0]),
    .cout    (cout)
);
add16 add16_inst2(
    .a        (a[31:16]),
    .b        (b[31:16]),
    .cin    (cout),
    .sum    (sum[31:16]),
    .cout    ()
);       
endmodule

module add1 ( input a, input b, input cin,   output sum, output cout );
assign sum  = a^b^cin;
assign cout = (a&b)|(a&cin)|(b&cin);

endmodule

Module cseladd

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
wire     sel;
wire [15:0]    sum2_1,sum2_2;

assign sum[31:16] = (sel == 1'b0)? sum2_1:sum2_2;

add16 add16_inst1(
    .a        (a[15:0]),
    .b        (b[15:0]),
    .cin    (1'b0),
    .sum    (sum[15:0]),
    .cout    (sel)
);

add16 add16_inst2(
    .a        (a[31:16]),
    .b        (b[31:16]),
    .cin    (1'b0),
    .sum    (sum2_1),
    .cout    ()
);
add16 add16_inst3(
    .a        (a[31:16]),
    .b        (b[31:16]),
    .cin    (1'b1),
    .sum    (sum2_2),
    .cout    ()
);

endmodule

Module addsub

module top_module(
    input [31:0] a,
    input [31:0] b,
    input sub,
    output [31:0] sum
); 
wire cout;
add16 add16_inst1(
    .a        (a[15:0]),
    .b        (b[15:0]^{16{sub}}),
    .cin    (sub),
    .sum    (sum[15:0]),
    .cout    (cout)
);

add16 add16_inst2(
    .a        (a[31:16]),
    .b        (b[31:16]^{16{sub}}),
    .cin    (cout),
    .sum    (sum[31:16]),
    .cout    ()
);

endmodule

 

posted @ 2021-03-01 17:18  IntoTheSky  阅读(655)  评论(0编辑  收藏  举报