计算机系统要素:测试文件解读
// 加载16位与门的硬件描述文件
load And16.hdl,
// 指定测试输出文件
output-file And16.out,
// 指定对比的标准答案文件
compare-to And16.cmp,
// 定义输出格式:a(二进制16位)、b(二进制16位)、out(二进制16位)
output-list a%B1.16.1 b%B1.16.1 out%B1.16.1;
// 测试用例1:全0 & 全0 → 全0
set a %B0000000000000000,
set b %B0000000000000000,
eval, // 执行运算
output; // 输出结果
// 测试用例2:全0 & 全1 → 全0
set a %B0000000000000000,
set b %B1111111111111111,
eval,
output;
// 测试用例3:全1 & 全1 → 全1
set a %B1111111111111111,
set b %B1111111111111111,
eval,
output;
// 测试用例4:交替位 & 反交替位 → 全0
set a %B1010101010101010,
set b %B0101010101010101,
eval,
output;
// 测试用例5:部分重叠位 & 部分重叠位 → 重叠位保留
set a %B0011110011000011,
set b %B0000111111110000,
eval,
output;
// 测试用例6:随机位组合 → 逐位与运算
set a %B0001001000110100,
set b %B1001100001110110,
eval,
output;
关键知识点解析:
一、指令作用:
load:加载待测试的硬件描述文件(And16.hdl);output-file:指定测试结果输出文件;compare-to:指定标准答案文件,用于自动比对测试结果;output-list:定义输出格式(二进制 16 位,显示 a、b、out);set:设置输入信号 a/b 的值;eval:执行硬件逻辑运算;output:输出运算结果。
二、a%B1.16.1 语法完全解析
在 Hack 硬件测试脚本(.tst)的output-list指令中,a%B1.16.1是输出格式控制符,用于定义信号a的显示规则,拆解如下:
| 组成部分 | 含义 |
|---|---|
a | 待显示的信号名(此处指 16 位输入信号 a,可替换为 b/out 等其他信号); |
% | 格式符分隔符,标识后续为格式定义; |
B | 数值显示进制:B= 二进制(Binary),其他可选值:D= 十进制、H= 十六进制; |
1 | 「位数对齐规则」:1表示高位在前(大端显示),若为0则低位在前; |
.16 | 「固定显示位数」:强制显示 16 位,不足补 0(核心!保证 16 位信号完整显示); |
.1 | 「分组间隔」:1表示无分组(连续显示),若为4则每 4 位分隔(如1111_0000); |
核心作用
a%B1.16.1 最终效果:将 16 位信号 a 以「高位在前、无分组、补 0 至 16 位」的二进制形式完整显示。
举例说明
假设信号a的实际值是二进制1010(仅 4 位),不同格式符的显示效果对比:
| 格式符 | 显示结果 | 说明 |
|---|---|---|
a%B1.16.1 | 0000000000001010 | 补 0 至 16 位,高位在前 |
a%B0.16.1 | 1010000000000000 | 补 0 至 16 位,低位在前 |
a%B1.8.1 | 00001010 | 补 0 至 8 位,高位在前 |
a%B1.16.4 | 0000_0000_0000_1010 | 16 位、每 4 位分组显示 |

浙公网安备 33010602011771号