欢迎光临散文网 会员登陆 & 注册

【基于FPGA的图像处理工程】边缘检测工程之Ascii转十六进制模块代码解析

2023-08-14 09:36 作者:明德扬易老师  | 我要投稿

【基于FPGA的图像处理工程】

                                                                      —边缘检测工程:Ascii转十六进制模块代码解析

本文为明德扬原创文章,转载请注明出处!

 Ascii转十六进制模块的功能:将ASCII所对应的16进制数,转成实质的16进制数。


 一、设计架构


上图是Ascii码表对应的数据。我们从图中可以获取到如下关键信息。

1.       Ascii码0~9对应的十六进制数为8’h30~8’h39,也就是说收到ASCII码的16进制数8’h30~8’h39时,就转成0~9,也就是减去8’h30。

2.      Ascii码A~F对应的十六进制数为8’h41~8’h46,也就是说收到ASCII码的16进制数8’h41~8’h46时,就转成A~F,也就是减去8’h37。

3.      Ascii码a~f对应的十六进制数为8’h61~8’h66,也就是说收到ASCII码的16进制数8’h61~8’h66时,就转成a~f,也就是减去8’h57。


 本模块的功能,是对ASCII码的0~9,a~f,A~F进行转换,其他数据不转换,不在此范围的,数据无效。例如:

        当din=8’h31(字符1),且din_vld = 1,则dout=4’h1,dout_vld=1;

        当din=8’h41(大写字母A)时,且din_vld=1,则dout=4‘d10,dout_vld=1;

        如果输入的ASCII不在数字0~9,A~F,a~f的时候,dout_vld就输出0。

        当din=8’h49(大写字母I)时,且din_vld=1,则dout=0,dout_vld=0。



二、信号的意义



  三、参考代码

下面展出本模块的设计,欢迎进一步交流,如果需要源代码,欢迎与本人联系。

  1. module acsii2hex(

  2.     clk      ,

  3.     rst_n    ,

  4.     din      ,

  5.     din_vld  ,

  6.    

  7.     dout    ,

  8.     dout_vld   

  9.     );


  10.     parameter      DIN_W =         8;

  11.     parameter      DOUT_W =        4;

  12.    

  13.     input               clk         ;

  14.     input               rst_n       ;

  15.     input [DIN_W-1:0]   din         ;

  16.     input               din_vld     ;


  17.     wire  [DIN_W-1:0]   din         ;

  18.     wire                din_vld     ;


  19.     output[DOUT_W-1:0]  dout        ;

  20.     output              dout_vld    ;


  21.     reg   [DOUT_W-1:0]  dout        ;

  22.     reg                 dout_vld    ;


  23.     always  @(posedge clk or negedge rst_n)begin

  24.         if(rst_n==1'b0)begin

  25.             dout_vld <= 0;

  26.         end

  27.         else if(din_vld&&((din>=8'd48&&din<8'd58)||(din>=8'd65&&din<8'd71)||(din>=8'd97&&din<8'd103)))begin

  28.             dout_vld <= 1;

  29.         end

  30.         else begin

  31.             dout_vld <= 0;

  32.         end

  33.     end



  34.     always@(posedge clk or negedge rst_n)begin

  35.         if(rst_n==1'b0)begin

  36.             dout <= 0;

  37.         end

  38.         else if(din>=8'd48&&din<8'd58) begin

  39.             dout <= din - 8'd48;

  40.         end

  41.         else if(din>=8'd65&&din<8'd71) begin

  42.             dout <= din - 8'd55;

  43.         end

  44.         else if(din>=8'd97&&din<8'd103) begin

  45.             dout <= din - 8'd87;

  46.         end

  47.         else begin

  48.             dout <= 0;

  49.         end   

  50.     end


  51.     endmodule


复制代码


明德扬专注FPGA研究,我司正在连载两本书籍:《基于FPGA至简设计法实现的图像边缘检测系统》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=691)、《ASIC和FPGA时序约束理论与应用》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=705),有兴趣点击观看。


【基于FPGA的图像处理工程】边缘检测工程之Ascii转十六进制模块代码解析的评论 (共 条)

分享到微博请遵守国家法律