TỔNG HỢP ÔN TẬP THIẾT KẾ VI MẠCH SỐ
TỔNG HỢP ÔN TẬP THIẾT KẾ VI MẠCH SỐ
TỔNG HỢP ÔN TẬP THIẾT KẾ VI MẠCH SỐ
CODE VHDL:
1. MULTIPLEXER A
2. MULTIPLEXER B
4. MULTIPLEXER D
module MultiplexerD (a,b,s,w);
input a,b,s;
output w;
reg w;
always @ (a,b,s) begin
if (s) w = b;
else w = a;
end
endmodule
5. MULTIPLEXER E
6. Counterupdown8
module Counterupdown8(reset, clk, count, pause, direction);
input reset, clk , pause, direction;
output [7:0] count ;
reg [7:0] count;
always @ (negedge clk) begin
if (reset) count <= 8'b00000000;
else if (pause) count <= count;
else if (direction) count <= count +1;
else count <= count - 1 ;
end
endmodule
7. Counter4
8. Fulladder (fulladder1bit)
module fulladder (a,b,cin,sum,cout);
input a,b,cin;
output sum, cout;
assign sum = a ^ b ^ cin ;
assign cout = (a & b) | (a & cin) | (b & cin);
endmodule
9. Fulladder4bit
module fulladder4bit(a,b,cin,sum,cout);
input [3:0] a,b;
input cin;
output [3:0] sum;
output cout;
wire c1, c2, c3;
fulladder fa0(a[0], b[0], cin, sum[0], c1);
fulladder fa1(a[1], b[1], c1, sum[1], c2);
fulladder fa2(a[2], b[2], c2, sum[2], c3);
fulladder fa3(a[3], b[3], c3, sum[3], cout);
endmodule
10. Mux41
module Mux41 (data0, data1, data2, data3, s0, s1, yout );
input data0, data1, data2, data3, s0, s1;
output [3:0] yout;
wire w0, w1;
assign w0 = s0 ? data1 : data0;
assign w1 = s0 ? data3 : data2;
assign yout = s1 ? w1 : w0;
endmodule
11. Mux8
12. ALU8
module ALU8 (input [7:0] left, right, input [1:0] mode, output reg [7:0] ALUout);
always @(left, right, mode) begin
case (mode)
0: ALUout = left + right;
1: ALUout = left - right;
2: ALUout = left & right;
3: ALUout = left | right;
default: ALUout = 8'bX;
endcase
end
endmodule
13. ALU
module ALU (Inbus, Aside, Bside, select_source, Function, Outbus);
input select_source ;
input [7:0] Inbus, Aside, Bside;
input [1:0] Function;
output [7:0] Outbus;
wire[7:0] ABinput;
Mux8 U1 ( select_source, Aside, Bside, ABinput );
ALU8 U2 ( Inbus, ABinput, Function, Outbus );
endmodule
14. ALU_Mux
module ALU_Mux(input [7:0] left, right, input [1:0] mode, input sel,
output reg [7:0] ALUout);
15. ShiftRegister8
module ShiftRegister8 (input sl, sr, clk, input [7:0] ParIn, input [1:0] m, output reg
[7:0] ParOut);
always @ (negedge clk) begin
case (m)
0: ParOut <= ParOut;
1: ParOut <= {sl, ParOut [7:1]};
2: ParOut <= {ParOut [6:0], sr};
3: ParOut <= ParIn;
default: ParOut <= 8'bX;
endcase
end
endmodule
16. ShiftRegister16
module ShiftRegister16 (input sl, sr, clk, input [15:0] ParIn, input [1:0] m, output
reg [15:0] ParOut);
always @ (negedge clk) begin
case (m)
0: ParOut <= ParOut;
1: ParOut <= {sl, ParOut [15:1]};
2: ParOut <= {ParOut [14:0], sr};
3: ParOut <= ParIn;
default: ParOut <= 16'bX;
endcase
end
endmodule
21. Mạch so sánh hai số nhị phân 4 bit, sử dụng lệnh assign
27. Mạch đếm lên/ xuống 8 bit có ngõ điều khiển up/down, load, pause,
reset.
28. Mạch đếm 4 bit có các trạng thái sau: 0,2,4,6,8,9,7,5,3,1,0,2..(lặp lại..)
29. Mạch Mux 2->1 bằng 3 cách: sử dụng lệnh assign; sử dụng modulo
ANDOR; sử dụng cấu trúc lệnh điều khiển.
SỬ DỤNG LỆNH ASSIGN:
2.
3.
4.
5.
6.
7.
CODE VERILOG:
1. KHAI BÁO:
2. KHỐI WRITE
3. KHỐI READ
4. KHỐI POINTER
5. BỘ ĐẾM
32. Mạch tạo mã gold.
1. sub_a
2. sub_b
3. gold_code