【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