输入数据的大小端转换也就是输入数据的高低位转换
`timescale 1ns/1ns
module function_mod(
input clk,
input rst_n,
input [3:0] a,
input [3:0] b,
output [3:0] c,
output [3:0] d
);
assign c = convert(a);
assign d = convert(b);
reg [3:0] c_reg;
reg [3:0] d_reg;
always @(negedge clk or negedge rst_n) begin
if(!rst_n) begin
c_reg <= 0;
d_reg <= 0;
end
else begin
c_reg <= convert(a);
d_reg <= convert(b);
end
end
assign c = c_reg;
assign d = d_reg;
//-- function [3:0] convert;
//-- input [3:0] data;
//-- begin
//-- genvar i;
//-- generate
//-- for(i = 0; i < 4; i = i+1)
//-- begin : gen_i
//-- assign convert[i] = data[3-i];
//-- end
//-- endgenerate
//-- end
//-- endfunction
function [3:0] convert;
input [3:0] data;
begin
convert[0] = data[3];
convert[1] = data[2];
convert[2] = data[1];
convert[3] = data[0];
end
endfunction
endmodule
题目中没有提到是组合逻辑电路还是时序逻辑电路,所以两种实现方法都可以,需要注意的就是在使用时序逻辑电路的时候,在时钟信号的下降沿开始就有数据输出,所以敏感时间列表中的clk信号是下降沿触发。