image.png

    输入数据的大小端转换也就是输入数据的高低位转换

    1. `timescale 1ns/1ns
    2. module function_mod(
    3. input clk,
    4. input rst_n,
    5. input [3:0] a,
    6. input [3:0] b,
    7. output [3:0] c,
    8. output [3:0] d
    9. );
    10. assign c = convert(a);
    11. assign d = convert(b);
    12. reg [3:0] c_reg;
    13. reg [3:0] d_reg;
    14. always @(negedge clk or negedge rst_n) begin
    15. if(!rst_n) begin
    16. c_reg <= 0;
    17. d_reg <= 0;
    18. end
    19. else begin
    20. c_reg <= convert(a);
    21. d_reg <= convert(b);
    22. end
    23. end
    24. assign c = c_reg;
    25. assign d = d_reg;
    26. //-- function [3:0] convert;
    27. //-- input [3:0] data;
    28. //-- begin
    29. //-- genvar i;
    30. //-- generate
    31. //-- for(i = 0; i < 4; i = i+1)
    32. //-- begin : gen_i
    33. //-- assign convert[i] = data[3-i];
    34. //-- end
    35. //-- endgenerate
    36. //-- end
    37. //-- endfunction
    38. function [3:0] convert;
    39. input [3:0] data;
    40. begin
    41. convert[0] = data[3];
    42. convert[1] = data[2];
    43. convert[2] = data[1];
    44. convert[3] = data[0];
    45. end
    46. endfunction
    47. endmodule

    题目中没有提到是组合逻辑电路还是时序逻辑电路,所以两种实现方法都可以,需要注意的就是在使用时序逻辑电路的时候,在时钟信号的下降沿开始就有数据输出,所以敏感时间列表中的clk信号是下降沿触发。