第四节:信号值解读——二进制、十六进制、十进制、有符号数在波形中的显示
波形图里那些跳来跳去的数字,到底在说什么?
说实话,我见过不少新手,盯着波形图看了半天,最后问我:“老师,这个值是‘1’还是‘-1’?”
嗯,这个问题问得好。信号值的显示方式,直接决定了你能不能看懂波形。今天我们就来把这四种进制彻底讲透。
4.1 二进制:最原始,也最直观
二进制是数字电路的老祖宗。每个bit只有0和1,简单粗暴。
在波形图里,二进制信号通常显示为“0101”这样的串。我个人习惯在调试控制信号时用二进制,比如状态机的状态编码、使能信号、标志位。为什么?因为一眼就能看出哪个bit变了。
举个例子:
你看到一个信号值是“1010”,二进制。你马上知道:bit3=1, bit2=0, bit1=1, bit0=0。如果换成十六进制显示成“0xA”,你还要在脑子里转个弯。
但二进制也有缺点——太长了。一个32位的数据,显示出来就是32个0和1,看着眼晕。所以,实际项目中,我们很少用二进制看大数据总线。
我的习惯:
控制信号、状态机、单bit信号 → 用二进制显示。
数据总线、地址总线 → 用十六进制或十进制显示。
4.2 十六进制:工程师的“速记法”
十六进制就是二进制的压缩版。每4个bit压缩成一个十六进制字符。0-9、A-F,一共16个符号。
比如二进制“1111 1010 1100 0011”,写成十六进制就是“0xFAC3”。是不是清爽多了?
我在项目中遇到过一件事:一个同事用二进制看AXI总线的地址,看了半天没发现问题。我让他切成十六进制,他立刻发现地址跳变不对——因为十六进制下,地址对齐问题一目了然。
注意:
十六进制显示时,波形工具通常会在前面加“0x”前缀。但有些工具不加,你要自己判断。比如显示“FF”,你得知道这是十六进制的255,不是二进制的“11111111”。
4.3 十进制:人类最舒服的阅读方式
十进制不用多解释,我们从小用到大。在波形里,十进制显示特别适合看计数器的值、数据采样结果、或者任何你关心“数值大小”的场景。
举个例子:你有一个计数器,从0数到100。用二进制看,你得盯着8个bit的变化,脑子还要算“现在是多少”。用十进制看,直接显示“0, 1, 2, 3...”,多省心。
但十进制有个坑——它默认是无符号的。如果你信号定义的是有符号数,十进制显示可能会让你误判。
避坑指南:
我曾经在调试一个音频处理模块时,用十进制看采样值。看到“65535”时,我以为数据正常。后来才发现,这个信号是有符号的16位数据,65535其实是-1!
从那以后,我养成了一个习惯:看数据之前,先确认信号是有符号还是无符号。
4.4 有符号数:最容易翻车的显示方式
有符号数在波形里显示,通常用补码形式。最高位是符号位,0表示正数,1表示负数。
比如一个8位有符号数:
- “0000 0001” = 1
- “1111 1111” = -1
- “1000 0000” = -128
在波形工具里,如果你把显示模式设为“有符号十进制”,那么“1111 1111”就会显示成“-1”。如果你设为“无符号十进制”,它显示成“255”。
你看,同一个二进制值,显示结果天差地别。
重要提醒:
波形工具不会自动判断你的信号是有符号还是无符号。你需要手动设置显示模式。很多bug就是因为这个设置错了,导致看了半天也没发现问题。
4.5 四种显示方式的对比
| 显示方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 二进制 | 控制信号、状态机、单bit | 最直观,每个bit独立 | 太长,大数据总线不适用 |
| 十六进制 | 地址、数据总线、寄存器值 | 简洁,与二进制转换方便 | 需要熟悉0-F的对应关系 |
| 十进制(无符号) | 计数器、采样值、普通数据 | 人类最习惯,数值大小一目了然 | 不能表示负数 |
| 十进制(有符号) | 音频数据、传感器数据、差值计算 | 能表示负数,符合数学直觉 | 容易与无符号混淆 |
4.6 实战技巧:如何快速切换显示模式
大部分波形工具(比如Verdi、DVE、Simvision)都支持右键点击信号,然后选择“Radix”或“Display Format”来切换显示模式。
我个人习惯:
- 先把所有信号设为十六进制,快速浏览一遍。
- 遇到控制信号,切成二进制,看bit变化。
- 遇到数据信号,根据是否有符号,切成对应的十进制。
你想想看,如果一开始就用二进制看32位数据,那不是自找麻烦吗?
一个小技巧:
在Verdi里,你可以选中多个信号,然后批量修改显示模式。不用一个一个改,省时间。
4.7 知识体系图
下面这张图总结了四种显示方式的核心逻辑和适用场景:
4.8 总结
信号值的显示方式,说白了就是“用什么语言看波形”。
二进制是底层语言,十六进制是工程师的速记法,十进制是人类最舒服的语言,有符号十进制则是处理负数时的必备工具。
我建议你养成一个习惯:拿到波形后,先花10秒钟确认每个信号的显示模式对不对。这个习惯,能帮你省下至少半小时的调试时间。
一句话记住:
显示模式错了,你看到的波形就是“假波形”。