FPGA 필기시험 12
unsigned char cal_table_high_first(unsigned char value)
{
unsigned char i;
unsigned char checksum = value;
for (i=8; i>0; --i)
{
if (checksum & 0x80)
checksum = (checksum << 1) ^ 0x31;
else
checksum = (checksum << 1);
}
return checksum;
}
대답:
module loop(
input clk,
input rst_n,
input [7:0] value,
output reg [7:0] checksum);
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
checksum<=0;
else
begin
for(i=0;i<8;i--)
checksum<={value[6:0],1'b0}^(8{value[7]}&8'h31);
end
end
endmodule
2. 자동 음료 판매기를 설계하는데 모두 두 가지 음료가 있는데 그 중에서 음료수 A는 한 개에 10전, 음료수 B는 한 개에 5전, 동전은 5점과 10점 두 가지가 있다. 그리고 거스름돈을 고려한다.상태기로 실현하고 상태를 정의하며 상태 이동도를 그리고 Verilog로 이 식별 모듈을 완전하게 설명해야 한다.
대답:
module state(
input clk,
input rst_n,
input mode,//0 5fen,1 10fen
input A,//5fen
input B,//10fen
output reg okay_A,
output reg okay_B,
output reg [2:0] coin
);
reg [1:0] state;
parameter idle = 3'b00;
parameter s1 = 3'b001;
parameter s2 = 3'b010;
parameter s3 = 3'b011;
parameter s4 = 3'b100;
parameter s5 = 3'b101;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
state<=idle;
else
case(state)
idle:
begin
if(!mode&&A)
begin
state<=s1;// 5 5
end
else if(mode&&B)
begin
state<=s2;// 10 10
end
else if(mode&&A)
begin
state<=s3;// 5 10
end
else if(!mode&&B)
begin
state<=s4;// 10 5
end
end
s1:
begin
state<=idle;
end
s2:
state<=idle;
s3:
state<=s5;//
s4:
state<=idle;
s5:
state<=idle;
always@(posedge clk or negedge rst_n)
begin
case(state):
idle:
begin
okay_A<=0;
okay_B<=0;
coin<=0;
end
s1:
begin
okay_A<=1;
end
s2:
okay_B<=1;
s3:
begin
okay_A<=0;
okay_B<=0;
coin<=0;
end
s4:
begin
okay_A<=1;
okay_B<=0;
coin<=3'd5;
end
s5:
begin
if(A&&!B)
okay_B<=1;
else(!A&&B)
begin
okay_B<=1;
coin<=3'd5;
end
end
endcase
end
endmodule
3, 시퀀스 신호 발생기 회로를 설계하여 CLK 신호 작용에서 "001010111"의 시퀀스 신호를 주기적으로 출력할 수 있다
대답:
module sequence_generator(
input clk ,
input rst_n ,
output out_sequence
);
reg [9:0] sequence ;
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
sequence <= 10'b0010110111 ;
end
else begin
sequence <= {sequence[8:0],sequence[9]} ;
end
end
assign out_sequence = sequence[9] ;
endmodule
4, (1011001)2에 대한 서열 검출 기능을 실현하고 모듈은 박자마다 2bit를 병렬 입력하며 순서는 높은 위치에서 먼저 입력하고 서열이 검출되면 고전평 펄스를 출력합니다.Verilog에서 이 모듈을 설명하면 (1)1011_00_1x (2) x1_01_10_01
대답:
module test(
input [1:0] data,
output pulse);
reg [3:0] state;
reg pulse1;
reg pulse2;
parameter idle = 4'b0000;
parameter s1 = 4'b0001;
parameter s2 = 4'b0010;
parameter s3 = 4'b0011;
parameter s4 = 4'b0100;
parameter s5 = 4'b0101;
parameter s6 = 4'b0110;
parameter s7 = 4'b0111;
parameter s8 = 4'b1000;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
state<=idle;
else
begin
case(state)
idle:
begin
if(data==2'b10)
state<=s1;
else if(data[0]==1'b1)
state<=s5;
end
s1:
begin
if(data==11)
state<=s2;
else
state<=idle;
end
s2:
begin
if(data==2'b00)
state<=s3;
else
state<=idle;
end
s3:
begin
if(data[1]=1'b1)
state<=s4;
else
state<=idle;
end
s4:
state<=idle;
s5:
begin
if(data==2'b01)
state<=s6;
else
state<=idle;
end
s6:
begin
if(data==2'b10)
state<=s7;
else
state<=idle;
end
s7:
begin
if(data==2'b01)
state<=s8;
else
state<=idle;
end
endcase
end
end
always@(posedge clk or negedge rst_n)
begin
case(state):
s4:
pulse1<=1'b1;
s8:
pulse1<1'b1;
default:
pulse1<=1'b0;
endcase
end
always@(posedge clk or negedge rst_n)
begin
pulse2<=pulse1;
end
assign pulse=pulse1&pulse2;
endmodule
5, f=100Hz의 Clock을 기반으로 숫자 시계를 설계하여 Verilog로 다음과 같은 기능을 실현하십시오. 1, 생성 시, 분, 초의 시간 2, 3개의 버튼을 통해 시, 분, 초 값을 설정할 수 있습니다.
module clock(
input clk ,
input rst_n ,
input hour_set,
input [4:0] hour_set_value ,
input minute_set,
input [5:0] minute_set_value ,
input second_set ,
input [5:0] second_set_value ,
output [5:0] second_out ,
output [5:0] minute_out ,
output [4:0] hour_out
);
reg [5:0] second_reg ;
reg [5:0] minute_reg ;
reg [4:0] hour_reg ;
always@(posedge clk or negedge rst_n ) begin
if(!rst_n) begin
second_reg <= 0 ;
end
else if(second_set) second_reg <= second_set_value ;
else if(second_reg == 59) second_reg <= 0;
else second_reg <= second_reg +1 ;
end
always@(posedge clk or negedge rst_n ) begin
if(!rst_n) begin
minute_reg <= 0 ;
end
else if(minute_set) minute_reg <= minute_set_value ;
else if(minute_reg == 59 && second_reg == 59) minute_reg <= 0;
else if(second_reg == 59) minute_reg <= minute_reg +1 ;
end
always@(posedge clk or negedge rst_n ) begin
if(!rst_n) begin
hour_reg <= 0 ;
end
else if(hour_set) hour_reg <= hour_set_value ;
else if(hour_reg == 23 && minute_reg == 59 && second_reg == 59) hour_reg <= 0;
else if(minute_reg == 59 && second_reg == 59 ) hour_reg <= hour_reg +1 ;
end
assign second_out = second_reg ;
assign minute_out = minute_reg;
assign hour_out = hour_reg;
endmodule
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.