input clk ,///25M系统时钟
input rst_n ,
input [47:0] s_adc_cfg_data_ascii ,//输入6个ascii码
output [23:0] s_adc_cfg_data_hex //输出6个HEX数据
reg [3:0] o_adc_cfg_data_hex_6 ;
reg [3:0] o_adc_cfg_data_hex_5 ;
reg [3:0] o_adc_cfg_data_hex_4 ;
reg [3:0] o_adc_cfg_data_hex_3 ;
reg [3:0] o_adc_cfg_data_hex_2 ;
reg [3:0] o_adc_cfg_data_hex_1 ;
always @(*) begin
//-----------------------------ascii转hex 解析-----------------------------------------
ascii2binary(s_adc_cfg_data_ascii[47:40] ,o_adc_cfg_data_hex_6 ) ;
ascii2binary(s_adc_cfg_data_ascii[39:32] ,o_adc_cfg_data_hex_5 ) ;
ascii2binary(s_adc_cfg_data_ascii[31:24] ,o_adc_cfg_data_hex_4 ) ;
ascii2binary(s_adc_cfg_data_ascii[23:16] ,o_adc_cfg_data_hex_3 ) ;
ascii2binary(s_adc_cfg_data_ascii[15:8] ,o_adc_cfg_data_hex_2 ) ;
ascii2binary(s_adc_cfg_data_ascii[7:0] ,o_adc_cfg_data_hex_1 ) ;
assign s_adc_cfg_data_hex = {o_adc_cfg_data_hex_6,o_adc_cfg_data_hex_5,o_adc_cfg_data_hex_4,o_adc_cfg_data_hex_3,o_adc_cfg_data_hex_2,o_adc_cfg_data_hex_1} ;
task ascii2binary;
input [7:0] ascii_in;
output [3:0]out;
begin
case (ascii_in)
8'h30: out = 4'd0; //ASCII value 48 = 0 in Binary
8'h31: out = 4'd1; //ASCII value 49 = 1 in Binary
8'h32: out = 4'd2; //ASCII value 50 = 2 in Binary
8'h33: out = 4'd3; //ASCII value 51 = 3 in Binary
8'h34: out = 4'd4; //ASCII value 52 = 4 in Binary
8'h35: out = 4'd5; //ASCII value 53 = 5 in Binary
8'h36: out = 4'd6; //ASCII value 54 = 6 in Binary
8'h37: out = 4'd7; //ASCII value 55 = 7 in Binary
8'h38: out = 4'd8; //ASCII value 56 = 8 in Binary
8'h39: out = 4'd9; //ASCII value 57 = 9 in Binary
8'h61: out = 4'd10; //ASCII value 97 = a in Binary
8'h62: out = 4'd11; //ASCII value 98 = b in Binary
8'h63: out = 4'd12; //ASCII value 99 = c in Binary
8'h64: out = 4'd13; //ASCII value 100 = d in Binary
8'h65: out = 4'd14; //ASCII value 101 = e in Binary
8'h66: out = 4'd15; //ASCII value 102 = f in Binary
default: out = 4'd0;
endcase
endtask
endmodule
十六
进制
代表的数据通过UART发送到电脑上表示出来,所以最终要求就是将十六
进制
表示的数据用
ASCII
码
表示传给电脑。反之
ASCII
转
16
进制
就需要考虑一下大小写。
ASCII
码
与
16
进制
数据需要
相互
转换
最近遇到一个小问题,从网络接收到的包中含有MAC地址(
ASCII
字符格式,例如”74
-
29
-
AF
-
F2
-
30
-
D3”,共18个字符),按照约定我需要把它
转换
成6个字节的二
进制
数(74 29 AF F2 30 D3)。
收到的字符串“74
-
29
-
AF
-
F2
-
30
-
D3”,是
ASCII
编
码
的,内存中就是:37 34 2d 32 39 2d 41 46 2d 46 32 2d 33 30 2d 44 3
PS/2键盘解
码
实验程序:
CPLD通过PS/2接收键盘的数据,然后把接收到的大写字母A
-
Z的键值
转换
成相应的
ASCII
码
,再通过串口传送给PC机。只要字母按键被按下,就能够在串口调试助手里显示相应的字母。
文件中包括
Verilog
和VHDL的两种语言的Quartus II程序,请您参考。
ASCII
(American Standard Code for Information Interchange:美国信息交换标准代
码
)是基于拉丁字母的一套电脑编
码
系统,主要用于显示现代英语和其他西欧语言。
它是现今最通用的信息交
ASCII
码
使用指定的7 位或8 位二
进制
数组合来表示128 或256 种可能的字符。
标准
ASCII
码
也叫基础
ASCII
码
,使用7 位二
进制
数(剩下的1位二
进制
...
编译指令是以 ` 为前缀,
ASCII
为0x60,而不是单引号 ’ ,单引号的
ASCII
为0x27
编译指令从处理它的位置就一直保持有效,除非后面被自己或者其他编译指令覆盖或者取消掉
`celldefine 和 `endcelldefine
`celldefine 和 `endcelldefine 用于将模块标记为单元(cell),一般在标准单元库中使用,一般来说写的代
码
都是模块,很少去把它标记为单元
最好在模块外面使用这两条指令
`celldefine
理清楚数据类型
转换
,还是要回归
ASCII
码
、
引用一下的
ASCII
表http://
ascii
.911cha.com/方便对比学习。在单片机中其实是自动识别十
进制
与
十六
进制
的,但是有时候需要对数据
转换
获取想要的
进制
数。下面介绍几种数据类型的
转换
,此外方法很多,只简单介绍本人愚见。
一、字符串转
ASCII
字符串其实就是上述
ASCII
表中的图形栏内容,
转换
成hex,即变成对应的十六
进制
数。通常以01...