找回密码
 注册
关于网站域名变更的通知
查看: 444|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-28 10:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

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

! P: r0 ?- x, O$ l" m: p
作者:小黑同学

% ]6 T8 {  ~% }$ l& {- T
本文为明德扬原创文章,转载请注明出处!

- u7 K, z2 \* X" @, c
Ascii转十六进制模块的功能:将ASCII所对应的16进制数,转成实质的16进制数。

+ l* M' V8 _, `& D3 `% S2 T
一、 设计架构
/ g3 H5 B% V2 y, O  D4 V- m
, ?; y' I( k0 Z' c5 a& _: R1 v9 R( ]
上图是Ascii码表对应的数据。我们从图中可以获取到如下关键信息。
8 j6 }  [: J& E: G% ]
1. Ascii码0~9对应的十六进制数为8'h30~8'h39,也就是说收到ASCII码的16进制数8'h30~8'h39时,就转成0~9,也就是减去8'h30。

( `/ ]# J* K* v
2. Ascii码A~F对应的十六进制数为8'h41~8'h46,也就是说收到ASCII码的16进制数8'h41~8'h46时,就转成A~F,也就是减去8'h37。
$ j2 K" ]/ v  b1 m. U
3. Ascii码a~f对应的十六进制数为8'h61~8'h66,也就是说收到ASCII码的16进制数8'h61~8'h66时,就转成a~f,也就是减去8'h57。
5 s+ K. H4 N7 h8 r/ D% g
本模块的功能,是对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;
! h2 p3 l+ h! p$ D
如果输入的ASCII不在数字0~9,A~F,a~f的时候,dout_vld就输出0。
当din=8'h49(大写字母I)时,且din_vld=1,则dout=0,dout_vld=0。

/ s+ S2 a" |% p% f1 {
二、 信号的意义

5 u* z1 ~) D1 F4 |
信号
类型
意义
clk
输入信号
时钟信号。
rst_n
输入信号
复位信号,低电平有效。
din
输入信号
接收的Ascii码数据,位宽为8bit。
din_vld
输入信号
输入数据有效指示信号,1bit位宽,当其为高电平时,对应输入数据有效,表示接收到一字节的数据。注意,一个时钟的高电平表示接收到一字节数据。
dout
输出信号
Ascii码转化为十六进制数之后的输出,位宽为4bit。
dout_vld
输出信号
输出数据有效指示信号,1bit位宽,当输入在红框范围内时,dout_vld为高电平,表示Ascii转十六进制转化成功,当输入不再红框范围内时,则dout_vld为低电平,表示数据无效。
2 ]6 V8 t/ O) Q& |. ^! n' Z
三、参考代码
: P1 L5 O* u  @! Q& U; H
下面展出本模块的设计,欢迎进一步交流,如果需要源代码,欢迎与本人联系。
) E6 g* D. _& }

module acsii2hex(

    clk      ,

    rst_n    ,

    din      ,

    din_vld  ,

4 Z8 @4 Y* p: ~9 \3 Q/ }' o! ~

    dout    ,

    dout_vld   

    );

) J1 y: B" s- [. Y

     parameter      DIN_W =         8;

     parameter      DOUT_W =        4;

, D$ z. E2 }- |) N" x

     input               clk         ;

     input               rst_n       ;

    input  [DIN_W-1:0]   din         ;

     input               din_vld     ;

0 f- g# k9 I1 v  k' F7 A

    wire   [DIN_W-1:0]   din         ;

    wire                din_vld     ;


# a2 a% n1 H  c; b2 c% A

     output[DOUT_W-1:0]  dout        ;

     output               dout_vld    ;


1 V* }. G( ?/ e

    reg   [DOUT_W-1:0]  dout         ;

    reg                 dout_vld    ;


) L" @5 b  p4 z- D( L+ i% i  I

     always  @(posedge clk or negedge  rst_n)begin

         if(rst_n==1'b0)begin

             dout_vld <= 0;

        end

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

             dout_vld <= 1;

        end

        else  begin

            dout_vld <= 0;

        end

    end


- K7 R2 R, ]  m9 z8 c3 R7 y' J- g: g$ J$ a# K+ L2 z% M" f. x

     always@(posedge clk or negedge rst_n)begin

         if(rst_n==1'b0)begin

             dout <= 0;

        end

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

             dout <= din - 8'd48;

        end

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

             dout <= din - 8'd55;

        end

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

             dout <= din - 8'd87;

        end

        else  begin

             dout <= 0;

         end   

    end

! v  Q- n" Z+ T- _+ H0 U: C

    endmodule

以上就是这个模块的介绍,有兴趣了解这个工程,可以和我讨论。

' B0 X9 p- @% y8 y9 a2 q; V4 X! Y
' U) _0 S# @) A- I5 t" ^; {$ g6 t( ?+ N, `
8 X7 c7 t, z5 E( o( r

该用户从未签到

2#
发表于 2019-12-28 18:17 | 只看该作者
此时一只菜鸡飘过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-12 13:13 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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