设为首页收藏本站帮助中心
查看: 50|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 反转16位/32位/64位整数字节序 (大小端转换) 8位半字节交换

[复制链接]
发表于 2022-1-2 16:13:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x
main.png
  1. module ReverseLongBytes(                        //64位大小端转换 反转长整数字节序模块
  2.         input [63:0] in,                                        //输入:0x0123456789ABCDEF
  3.         output [63:0] out                                        //输出:0xEFCDAB8967452301
  4. );
  5.         assign out[63:56] = in[7:0];
  6.         assign out[55:48] = in[15:8];
  7.         assign out[47:40] = in[23:16];
  8.         assign out[39:32] = in[31:24];
  9.         assign out[31:24] = in[39:32];
  10.         assign out[23:16] = in[47:40];
  11.         assign out[15:8] = in[55:48];
  12.         assign out[7:0] = in[63:56];       
  13. endmodule

  14. module ReverseIntBytes(                        //32位大小端转换 反转整数字节序模块
  15.         input [31:0] in,                                //输入:0xABCD1234
  16.         output [31:0] out                                //输出:0x3412CDAB
  17. );
  18.         assign out[31:24] = in[7:0];
  19.         assign out[23:16] = in[15:8];
  20.         assign out[15:8] = in[23:16];
  21.         assign out[7:0] = in[31:24];
  22. endmodule

  23. module ReverseShortBytes(                        //16位大小端转换 反转短整数字节序模块
  24.         input [15:0] in,                                        //输入:0xABCD
  25.         output [15:0] out                                        //输出:0xCDAB
  26. );
  27.         assign out[15:8] = in[7:0];
  28.         assign out[7:0] = in[15:8];
  29. endmodule

  30. module Swap(                                                        //8位半字节交换
  31.         input [7:0] in,                                        //输入:0xA5
  32.         output [7:0] out                                        //输出:0x5A
  33. );
  34.         assign out[7:4] = in[3:0];
  35.         assign out[3:0] = in[7:4];
  36. endmodule


  37. module main (
  38.         input clk,                        //时钟输入
  39.         output reg led                //LED 计算正确点亮 否则熄灭 (低电平点亮)
  40. );

  41. wire [63:0] Long;
  42. wire [31:0] Int;
  43. wire [15:0] Short;
  44. wire [7:0] Byte;

  45. ReverseLongBytes ReverseLongBytes(
  46.         .in(64'h0123456789ABCDEF),
  47.         .out(Long)
  48. );

  49. ReverseIntBytes ReverseIntBytes(
  50.         .in(32'hABCD1234),
  51.         .out(Int)
  52. );

  53. ReverseShortBytes ReverseShortBytes(
  54.         .in(16'hABCD),
  55.         .out(Short)
  56. );

  57. Swap Swap(
  58.         .in(8'hA5),
  59.         .out(Byte)
  60. );

  61. always @(posedge clk) begin
  62.         if(Long == 64'hEFCDAB8967452301 && Int == 32'h3412CDAB && Short == 16'hCDAB && Byte == 8'h5A) begin
  63.                 led <= 0;
  64.         end else begin
  65.                 led <= 1;
  66.         end
  67. end
  68.        
  69.        
  70. endmodule
复制代码

相关帖子

这个小可爱很神秘,什么都没留下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则