verilog实现十进制正数与ASCII码互转

打印 上一主题 下一主题

主题 1608|帖子 1608|积分 4824

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

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

x
verilog实现十进制正数与ASCII码互转

1.小位宽数实现转ASCII码

1.小整数十进制转BCD码(8421码)

十进制数01234567898421码00000001001000110100010101100111100010012.BCD码(8421码)转ASCII码

8421码0000000100100011010001010110011110001001ASCII码(BIN)110000110001110010110011110100110101110110110111111000111001ASCII码(DEC)48495051525354555657ASCII码(HEX)303132333435363738392.大位宽正整数实现转ASCII码

1.整数数位分割(BCD码)

​        分离数位有多种方法,除法和比力法,除法理解简单,但是在verilog中占用资源严峻,需要使用到除法IP核,以下采用比力法。
比力法分离数位:
  1. 假设一个数为num=123,使用A,B,C来代替百位,十位和个位。(以下为伪代码)
  2. 分离百位:
  3. if(num >=900)      A = 9; num = num - 900;
  4. else if(num >=800) A = 8; num = num - 800;
  5. else if(num >=700) A = 7; num = num - 700;
  6. else if(num >=600) A = 6; num = num - 600;
  7. else if(num >=500) A = 5; num = num - 500;
  8. else if(num >=400) A = 4; num = num - 400;
  9. else if(num >=300) A = 3; num = num - 300;
  10. else if(num >=200) A = 2; num = num - 200;
  11. else if(num >=100) A = 1; num = num - 100;
  12. else                           A = 0; num = num      ;
  13. 分离十位和个位:
  14. if(num >=90)      B = 9; C = num - 90;
  15. else if(num >=80) B = 8; C = num - 80;
  16. else if(num >=70) B = 7; C = num - 70;
  17. else if(num >=60) B = 6; C = num - 60;
  18. else if(num >=50) B = 5; C = num - 50;
  19. else if(num >=40) B = 4; C = num - 40;
  20. else if(num >=30) B = 3; C = num - 30;
  21. else if(num >=20) B = 2; C = num - 20;
  22. else if(num >=10) B = 1; C = num - 10;
  23. else                          B = 0; C = 0      ;
复制代码
2.verilog实现十进制正数转ASCII码

[code]module        dec_ascii16(        input                        clk                        ,        input                        rst                        ,                input                        valid                ,        input        [15:0]        din                        ,//MAX = 65535                output                        rdy                        ,        output        [39:0]        dout);        reg        [$clog2(9999)-1:0]        num0;        reg        [$clog2(999)-1:0]        num1;        reg        [$clog2(99)-1:0]        num2;        reg        [4*4-1:0]        dig0;        reg        [3*4-1:0]        dig1;        reg        [2*4-1:0]        dig2;        reg        [1*4-1:0]        dig3;        reg        [1*4-1:0]        dig4;                reg        [3:0]                valid_d;        always @(posedge clk)begin                if(rst)begin                        valid_d
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表