首先看题:
其次,这里按题目的意思,一个重点内容就是数据比较的时序问题,完成整个过程需要3个clk,不能直接使用纯组合逻辑进行比较,或者直接,a,b比较完得到的数据与c直接比,这会造成时序问题,所以是先ab比,ac比,然后下一个clk,两个比较结果再次比较才得到a,b,c三者的比较结果。直接放上我自己的代码吧,就不按照题目要求调用子模块了。
`timescale 1ns/1ns
module main_mod(
input clk,
input rst_n,
input [7:0]a,
input [7:0]b,
input [7:0]c,
output [7:0]d
);
reg [7:0] e ;
reg [7:0] f ;
reg [7:0] d_reg ;
assign d = d_reg ;
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
e<=8'b0;
end
else begin
e <=(a<=b)?a:b ;
end
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
f<=8'b0;
end
else begin
f <=(a<=c)?a:c ;
end
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
d_reg<=8'b0;
end
else begin
d_reg <=(e<=f)?e:f ;
end
end
endmodule