明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 7639|回复: 0

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

[复制链接]
发表于 2019-12-7 11:46:13 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【基于FPGA的图像处理工程】
                                                                                     —边缘检测工程:Ascii转十六进制模块代码解析
作者:小黑同学
        本文为明德扬原创文章,转载请注明出处!
        Ascii转十六进制模块的功能:将ASCII所对应的16进制数,转成实质的16进制数。
        一、设计架构
13.png

        上图是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。


        二、信号的意义
  
信号
  
类型
意义
clk
输入信号
时钟信号。
rst_n
输入信号
复位信号,低电平有效。
din
输入信号
接收的Ascii码数据,位宽为8bit。
din_vld
输入信号
输入数据有效指示信号,1bit位宽,当其为高电平时,对应输入数据有效,表示接收到一字节的数据。注意,一个时钟的高电平表示接收到一字节数据。
dout
输出信号
Ascii码转化为十六进制数之后的输出,位宽为4bit。
dout_vld
输出信号
输出数据有效指示信号,1bit位宽,当输入在红框范围内时,dout_vld为高电平,表示Ascii转十六进制转化成功,当输入不再红框范围内时,则dout_vld为低电平,表示数据无效。

        三、参考代码
        下面展出本模块的设计,欢迎进一步交流,如果需要源代码,欢迎与本人联系。
  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),有兴趣点击观看。
也欢迎加入群(838209674),及时获取最新的文章信息,整个边缘检测工程源代码可加Q:1817866119(N老师)获取!

加QQ:1744527324,获取更多FPGA资料!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-4-20 08:39 , Processed in 0.051910 second(s), 25 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表