More Combinational Logic
Case statements

If statements
Truth Tables with Don't Cares
Blocking and Nonblocking Assignments
Last updated

Last updated
module sevenseg(input logic [3:0] data,
output logic [6:0] segments);
always_comb
case (data)
// abc_defg
0: segments = 7'b111_1110;
1: segments = 7'b011_0000;
2: segments = 7'b110_1101;
3: segments = 7'b111_1001;
4: segments = 7'b011_0011;
5: segments = 7'b101_1011;
6: segments = 7'b101_1111;
7: segments = 7'b111_0000;
8: segments = 7'b111_1111;
9: segments = 7'b111_0011;
default: segments = 7'b000_0000;
endcase
endmodulemodule sevenseg(input [3:0] data,
output reg [6:0] segments);
always @(*)
case (data)
// abc_defg
0: segments = 7'b111_1110;
1: segments = 7'b011_0000;
2: segments = 7'b110_1101;
3: segments = 7'b111_1001;
4: segments = 7'b011_0011;
5: segments = 7'b101_1011;
6: segments = 7'b101_1111;
7: segments = 7'b111_0000;
8: segments = 7'b111_1111;
9: segments = 7'b111_1011;
default: segments = 7'b000_0000;
endcase
endmodulemodule priority_casez(input logic [3:0] a,
output logic [3:0] y);
always_comb
casez (a)
4'b1???: y <= 4'b1000;
4'b01??: y <= 4'b0100;
4'b001?: y <= 4'b0010;
4'b0001: y <= 4'b0001;
default: y <= 4'b0000;
endcase
endmodulemodule priority_casez(input [3:0] a,
output reg [3:0] y);
always @(*)
casez (a)
4'b1???: y = 4'b1000;
4'b01??: y = 4'b0100;
4'b001?: y = 4'b0010;
4'b0001: y = 4'b0001;
default: y = 4'b0000;
endcase
endmodulealways_ff @(posedge clk) begin
n1 <= d; // nonblocking
q <= n1; // nonblocking
endassign y = s ? d1 : d0;always_comb begin
p = a ^ b; // blocking
g = a & b; // blocking
s = p ^ cin;
cout = g | (p & cin);
endalways @(posedge clk) begin
n1 <= d; // nonblocking
q <= n1; // nonblocking
endassign y = s ? d1 : d0;always @ (*)
p = a ^ b; // blocking
g = a & b; // blocking
s = p ^ cin;
cout = g | (p & cin);
endreg done;
always @(posedge CLK) begin
if (...) begin
...
end
done <= 1;
else begin
...
done <= 1;
end
ebd