2009. 4. 4 오후

디지털 시스템 설계 및 실험	출제: 채수익

중간고사 1

1. (4-to-1 mux 설계)

A. 4-to-1 mux를 verilog로 verilog로 기술하시오. (5 pts)

module mux_4to1(x, a0, a1, a2, a3, select);

parameter n = 8;

input [1:0] select;

input [n-1:0] a, b, c, d;

output [n-1:0] x;

...

endmodule

B. 4-to-1 mux를 이용하여 16-to-1 mux를 verilog로 기술하시오. (5 pts)

module mux_16to1(x, a0, a1, a2, a3, a4, a5, a6, a7,

a8, a9, a10, a11, a12, a13, a14, a15, select);

parameter n = 8;

input [3:0] select;

input [n-1:0] a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;

output [n-1:0] x;

...

endmodule

2. (16-bit carry lookahead adder 설계)

A. full adder module과 n-bit carry lookahead logic module를  verilog로 기술하시오.

(2 pts+3 pts)

module full_adder(sum, c_out, a,b, c_in);

input a, b, c_in;

output sum, c_out;

...

endmodule

module carry_lookahead(c_out, g, p, c_in);

parameter n = 4;

output [n-1:0] c_out;

input [n-1:0] g;

input [n-1:0] p;

input c_in;

...

endmodule

B.  full-adder 모듈들을 사용하여 n-bit adder 를 기술하시오. (5 pts)

module RCA_adder(S, c_out, A, B, c_in);

parameter n = 4;

input [n-1:0] A, B;

input c_in;

output [n-1:0] S;

output c_out;

...

endmodule

C. 위 full_adder 모듈들을 사용하지 않고, n-bit carry lookahead adder를 기술하시오.

(5 pts)

module CLA_adder(S, c_out, A, B, c_in);

parameter n = 4;

input [n-1:0] A, B;

input c_in;

output [n-1:0] S;

...

endmodule

D. 위 모듈들을 이용하여 4-bit CLA를 4개 이용하여 16-bit CLA를 만드시오. (5pts)

module 16bit_CLA_adder(S, c_out, A, B, c_in);

input [15:0] A, B;

input c_in;

output [15:0] S;

output c_out;

...

endmodule

3. 다음 두 verilog code의 차이를 설명하고 그 회로를 그리시오. (5 pts + 5 pts)

module circuit3_A(enable, a, q,reset_n);

input enable, a, reset_n;

output reg q;

always @(a or enable or reset_n)

if ((!reset_n) q <=1b'0;

else if (enable) q <= a;

endmodule

module circuit3_B(enable, a, q, clock,reset_n);

input enable, a, clock,reset_n;

output reg q;

always @(posedge clock or negedge reset_n);

if (!reset_n) q <=1'b0;

else if (enable) q <= a;

endmodule

4. verilog simulation에서 사용하는 stratified event scheduling과 관련된 다음에 답하시오.

A. 다음 용어를 설면하시오. (2 pts)

simulation cycle:

inactive event:

B. 다음 event들을  우선 순위가 높은 순으로  정리하세요. (3 pts)

non-blocking assignment event, inactive event, active event, monitor event

C.  verilog simulation reference model을 pseudo code로 기술하시오. (5 pts)

5. n-bit Johnson counter를 verilog로 기술하시오. (10 pts)

module johnson(clk, start, qout);

parameter n= 8;

input clk, start;

output reg [n-1:0] qout;

...

endmodule

6. casex문장을 사용하여 priority encoder를 verilog로 기술하시오. (10 pts)

module priority_en(y, valid, in);

parameter n = 8;

parameter log2n = 3;

input [n-1:0] in;

input valid;

output reg [log2n-1:0] y;

...

endmodule

7. 아래와 같은 universal shift register를 verilog로 기술하시오. [10 pts]

module universal(clk, reset_n, s0, s1,rsi, lsi, din, qout);

parameter n = 4;

input clk, reset_n;

input s0, s1; // control

input lsi, rsi; // left shift input, right shift input

input [n-1:0] din;

output reg [n-1:0] qout;

...

endmodule

8. 매 clock 마다 sample된 a,b,c 값을 받아서 x= a - ( b+ c)를

A. single cycle에 수행하도록 즉 latency가 1 clock cycle이 되도록 verilog로 기술하시오.

(10 pts)

module single_cycle(clock, a, b, c, x);

input [7: 0] a, b, c;

input clock;

output [7:0] x;

...

endmodule

B. latency가 3 clock cycle인 3 stage pipeline으로 구현되도록 verilog로 기술하시오.

(10 pts)

module pipeline_3cycle(clock, a, b, c, x);

input [7: 0] a, b, c;

input clock;

output [7:0] x;

...

endmodule

9. 8-bit input과 1-bit parity을 받아서 parity error 여부를 판단하는 회로를 verilog로

기술하시오. (10 pts)

module parity(data, parity, even_odd, error);

input [7: 0] data;

input parity;

input even_odd; // 0 for even parity, 1 for odd parity

output error; // 1 for parity error

...

endmodule

10. 위 문제를 같은 기능인데 먼저 8-bit input 이 순차적으로 들어보고 1-bit parity가 들어는

것이 반복되는 sequential input을 받아서 parity error 여부를 판단하는 moore FSM을

verilog로  기술하시오. (10 pts)

module parity(clock, data, even_odd, error);

input data, clock;

input even_odd; // 0 for even parity, 1 for odd parity

output reg error; // 1 for parity error

...

endmodule

11. 0101 sequence를 detect하는 mealy FSM를 always 문 3개를 이용하여 verilog로

기술하시오. (10 pts)

module sequence0101(clock, data, z,reset_n);

input data, clock, reset_n;

output reg z; 1 if detected

...

endmodule