组合逻辑电路

偶校验码生成器

设某数字系统的数据交换按半字节进行(传输数据为4位),同时保证数据交换的正确性,设计一个偶校验码生成器。

通过查阅资料得知:奇偶校验码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。是一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法。

现在定义四位的数据输入(半字节)

1
input [0:3]in;

接着定义五位偶检验码的输出。其中前4位对应数据输入的4位信息元,最后为1位偶校验元

1
output [0:4]out;

五位偶检验码的前4位为对应4位数据数据,可以直接对应。通过计算可以推导出偶检验码的计算公式,偶检验码 r = a0⊕a1⊕a2⊕a3 (奇检验码 r = a0⊕a1⊕a2⊕a3⊕1),其中ai表示4位传输数据中对应的码元。在verilog中使用"^"表示异或运算。

1
2
out[0:3] = in[0:3];   //4位输出信息元对应4位传输数据
out[4] = in[0]^in[1]^in[2]^in[3]; //偶校验元

因此偶校验码生成器完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
`timescale 1ns/100ps

module pccg(in,out);

input [0:3]in;
output [0:4]out;

assign out[0:3] = in[0:3]; //4位输出信息元对应4位传输数据
assign out[4] = in[0]^in[1]^in[2]^in[3]; //偶校验元

endmodule

vivado生成的电路图如下:

image-20211007213847079

2. 命令启停器

为computer house中烧咖啡的机器老鼠设计一个命令启停器。

首先我定义一个总控制位En表示网关命令是否有效(1表示网关命令的有效,0表示网关命令无效)

1
wire En;

通过题目得知网关命令中如果同时出现矛盾的命令对(F与B、I与S、TUON与TUOF)话,表示网关命令的无效。因此En应该如下表示:

1
En = ~(F*B + I*S + TUON*TUOF);

在老鼠四个动作行为中。老鼠的前进(A动作)、老鼠的后退(C动作)由En、F、B来控制,对应的真值表为:

En F B A C
0 x x 0 0
1 0 0 0 0
1 0 1 0 1
1 1 0 1 0

其中x表示该位可以为“1”也可以为“0”。如果当F和B同时为1时,En为0。因此包含在第一中情况中。

写出对应的verilog语言为:

1
2
A = En*F
C = En*B

此外在老鼠四个动作行为中。咖啡的注入(D动作)、咖啡的停止注入(E动作)由En、I、S来控制,对应的真值表为:

En I S D E
0 x x 0 0
1 0 0 0 0
1 0 1 0 1
1 1 0 1 0

写出对应的verilog语言为:

1
2
D = En*I
E = En*S

因此烧咖啡机器老鼠的命令启停器的完整代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
`timescale 1ns/100ps

module controller(F, B, I, S, TUON, TUOF, A, C, D, E);

input F, B, I, S, TUON, TUOF;
output A, C, D, E;
wire En;

assign En = ~(F*B + I*S + TUON*TUOF);
assign A = En*F;
assign C = En*B;
assign D = En*I;
assign E = En*S;

endmodule

通过vivado综合生成的电路图如下:

image-20211007225740825