题目描述:
在数字芯片设计中,通常把完成特定功能且相对独立的代码编写成子模块,在需要的时候再在主模块中例化使用,以提高代码的可复用性和设计的层次性,方便后续的修改。
请编写一个子模块,将输入两个8bit位宽的变量data_a,data_b,并输出data_a,data_b之中较小的数。并在主模块中例化,实现输出三个8bit输入信号的最小值的功能。
子模块的信号接口图如下:
关键知识:有关于模块的例化
sel_mod u1(.clk(clk) , .rst_n(rst_n) , .data_a(a) ,.data_b(b) ,.c(n));
sel_mod u2(.clk(clk) , .rst_n(rst_n) , .data_a(a), .data_b(c) ,.c(m));
sel_mod u3(.clk(clk) , .rst_n(rst_n) , .data_a(n), .data_b(m) ,.c(d));
核心代码设计一个两位数的比大小的比较器,通过中间变量连接几个模块:
wire[7:0] m,n;
sel_mod u1(.clk(clk) , .rst_n(rst_n) , .data_a(a) ,.data_b(b) ,.c(n));
sel_mod u2(.clk(clk) , .rst_n(rst_n) , .data_a(a), .data_b(c) ,.c(m));
sel_mod u3(.clk(clk) , .rst_n(rst_n) , .data_a(n), .data_b(m) ,.c(d));
endmodule
module sel_mod(
input clk,
input rst_n,
input [7:0]data_a,
input [7:0]data_b,
output reg[7:0] c
);
always@(posedge clk or negedge rst_n) begin
if(!rst_n) c <= 0;
else begin
if(data_a < data_b) c <= data_a;
else c <= data_b;
end
end
endmodule