M
maheshkuruganti
Guest
안녕,
난 내가의 UART를 사용하는 직렬 인터페이스를 통해 6 레지스터들의 값을 할당해야합니다.그래서 만약 내 논리가 정확한지 여부를 알고 싶어 다음 코드를 내 섬기게 될 것이다 CMOSExod 마이크로 UART.I을 확인할 수없습니다.
코드 :
모듈의 입력 (
입력 Clk,
입력, RxD
출력 [31:0] FreqW,
출력 [31:0] 비밀 번호,
출력 [31:0] PW2,
출력 [31:0] 딜레이,
출력 [31:0] Delay2
);////////////////////////////////////////////////// ////////////////////////////////
/ / 매개 변수를 선언합니다. / /
////////////////////////////////////////////////// ////////////////////////////////
매개 변수 Increment1K = 42949;
매개 변수 Increment1M = 42949672;
매개 변수는 유휴 = 6'b000001;
= 6'b000010 ADR 매개 변수;
매개 변수가 D0 = 6'b000100;
매개 변수 D1 = 6'b001000;
매개 변수를 D2에 = 6'b010000;
매개 변수 D3 = 6'b100000;////////////////////////////////////////////////// ////////////////////////////////
/ / 등록 및 와이어 선언합니다. / /
////////////////////////////////////////////////// ////////////////////////////////
[31:0] FrequencyWord = Increment1M * 2 reg;
[31:0] Pulse_Width = 25 reg;
] Pulse_Width2 [31:0 reg;
[31:0] Delay_Hold = 32'h00000005 reg;
] Delay_Hold2 [31:0 reg;
] 데이터 [31:0 reg;
/ / 바이트 카운터.
] ByteCounter [5시 reg;
/ / 데이터 에지 감지기
] DataRdy [1:0 reg;
와이어 DataReady;
/ / 디코딩 주소
] 주소 [7시 reg;
/ /의 UART 전선.
와이어 RxD_data_ready;
와이어 [7시] RxD_data;
와이어 Baud_Clk;
////////////////////////////////////////////////// ////////////////////////////////
/ / USART 리시버와 디코더. / /
////////////////////////////////////////////////// ///////////////////////////////// / 모듈 인스턴스
u_rec 수신기 (
. sys_rst_l (1),
. sys_clk (Baud_Clk),
. uart_dataH (RxD)
. rec_dataH (RxD_data),
. rec_readyH (RxD_data_ready)
);/ / 모듈 인스턴스
보오드 Baud_Generator (
. sys_clk (Clk),
. sys_rst_l (1),
. baud_clk (Baud_Clk)
);////////////////////////////////////////////////// ////////////////////////////////
/ / 데이터 디코더 또는 해석기 / /
////////////////////////////////////////////////// ///////////////////////////////// / 저장소에 등록 전환하면 데이터 준비 상태.
항상 (posedge Clk) @
DataRdy <= (DataRdy [0], RxD_data_ready);/ / 데이터 가용성 비트.
) DataReady = (DataRdy == 2'b01 할당?
1'b1 : 1'b0;항상 (posedge Clk) @
시작
만약 () DataReady
시작
케이스 (ByteCounter)
유휴 모드 : ByteCounter = ADR;
ADR : ByteCounter =가 D0;
가 D0 : ByteCounter = D1;
D1 : ByteCounter = D2에;
D2에 : ByteCounter = D3;
D3 : ByteCounter = 유휴;
기본값 : ByteCounter = 유휴;
endcase
끝
끝항상 (posedge Clk) @
시작
(ByteCounter == ADR)
주소 = RxD_data;
다른 경우 (ByteCounter ==가 D0)
데이터 = (데이터 [31:8], RxD_data);
다른 경우 (ByteCounter == D1)
데이터 = (데이터 [31:16], RxD_data, 데이터 [7시]);
다른 경우 (ByteCounter == D2에)
데이터 = (데이터 [31:24], RxD_data, 데이터 [15시]);
다른 경우 (ByteCounter == D3)
데이터 = (RxD_data, 데이터 [23시]);
끝항상 (posedge Clk) @
시작
케이스 (주소)
8'h41 : FrequencyWord = 데이터;
8'h42 : Pulse_Width = 데이터;
8'h43 : Pulse_Width2 = 데이터;
8'h44 : Delay_Hold = 데이터;
8'h45 : Delay_Hold2 = 데이터;
기본값 : FrequencyWord = FrequencyWord;
endcase
끝FreqW = FrequencyWord 할당;
비밀 번호 = Pulse_Width 할당;
PW2 = Pulse_Width2 할당;
지연 = Delay_Hold 할당;
Delay2 = Delay_Hold2 할당;endmodule
난 내가의 UART를 사용하는 직렬 인터페이스를 통해 6 레지스터들의 값을 할당해야합니다.그래서 만약 내 논리가 정확한지 여부를 알고 싶어 다음 코드를 내 섬기게 될 것이다 CMOSExod 마이크로 UART.I을 확인할 수없습니다.
코드 :
모듈의 입력 (
입력 Clk,
입력, RxD
출력 [31:0] FreqW,
출력 [31:0] 비밀 번호,
출력 [31:0] PW2,
출력 [31:0] 딜레이,
출력 [31:0] Delay2
);////////////////////////////////////////////////// ////////////////////////////////
/ / 매개 변수를 선언합니다. / /
////////////////////////////////////////////////// ////////////////////////////////
매개 변수 Increment1K = 42949;
매개 변수 Increment1M = 42949672;
매개 변수는 유휴 = 6'b000001;
= 6'b000010 ADR 매개 변수;
매개 변수가 D0 = 6'b000100;
매개 변수 D1 = 6'b001000;
매개 변수를 D2에 = 6'b010000;
매개 변수 D3 = 6'b100000;////////////////////////////////////////////////// ////////////////////////////////
/ / 등록 및 와이어 선언합니다. / /
////////////////////////////////////////////////// ////////////////////////////////
[31:0] FrequencyWord = Increment1M * 2 reg;
[31:0] Pulse_Width = 25 reg;
] Pulse_Width2 [31:0 reg;
[31:0] Delay_Hold = 32'h00000005 reg;
] Delay_Hold2 [31:0 reg;
] 데이터 [31:0 reg;
/ / 바이트 카운터.
] ByteCounter [5시 reg;
/ / 데이터 에지 감지기
] DataRdy [1:0 reg;
와이어 DataReady;
/ / 디코딩 주소
] 주소 [7시 reg;
/ /의 UART 전선.
와이어 RxD_data_ready;
와이어 [7시] RxD_data;
와이어 Baud_Clk;
////////////////////////////////////////////////// ////////////////////////////////
/ / USART 리시버와 디코더. / /
////////////////////////////////////////////////// ///////////////////////////////// / 모듈 인스턴스
u_rec 수신기 (
. sys_rst_l (1),
. sys_clk (Baud_Clk),
. uart_dataH (RxD)
. rec_dataH (RxD_data),
. rec_readyH (RxD_data_ready)
);/ / 모듈 인스턴스
보오드 Baud_Generator (
. sys_clk (Clk),
. sys_rst_l (1),
. baud_clk (Baud_Clk)
);////////////////////////////////////////////////// ////////////////////////////////
/ / 데이터 디코더 또는 해석기 / /
////////////////////////////////////////////////// ///////////////////////////////// / 저장소에 등록 전환하면 데이터 준비 상태.
항상 (posedge Clk) @
DataRdy <= (DataRdy [0], RxD_data_ready);/ / 데이터 가용성 비트.
) DataReady = (DataRdy == 2'b01 할당?
1'b1 : 1'b0;항상 (posedge Clk) @
시작
만약 () DataReady
시작
케이스 (ByteCounter)
유휴 모드 : ByteCounter = ADR;
ADR : ByteCounter =가 D0;
가 D0 : ByteCounter = D1;
D1 : ByteCounter = D2에;
D2에 : ByteCounter = D3;
D3 : ByteCounter = 유휴;
기본값 : ByteCounter = 유휴;
endcase
끝
끝항상 (posedge Clk) @
시작
(ByteCounter == ADR)
주소 = RxD_data;
다른 경우 (ByteCounter ==가 D0)
데이터 = (데이터 [31:8], RxD_data);
다른 경우 (ByteCounter == D1)
데이터 = (데이터 [31:16], RxD_data, 데이터 [7시]);
다른 경우 (ByteCounter == D2에)
데이터 = (데이터 [31:24], RxD_data, 데이터 [15시]);
다른 경우 (ByteCounter == D3)
데이터 = (RxD_data, 데이터 [23시]);
끝항상 (posedge Clk) @
시작
케이스 (주소)
8'h41 : FrequencyWord = 데이터;
8'h42 : Pulse_Width = 데이터;
8'h43 : Pulse_Width2 = 데이터;
8'h44 : Delay_Hold = 데이터;
8'h45 : Delay_Hold2 = 데이터;
기본값 : FrequencyWord = FrequencyWord;
endcase
끝FreqW = FrequencyWord 할당;
비밀 번호 = Pulse_Width 할당;
PW2 = Pulse_Width2 할당;
지연 = Delay_Hold 할당;
Delay2 = Delay_Hold2 할당;endmodule