M
maheshkuruganti
Guest
HI,
Jeg har brug for at tildele 6 registre deres værdi i løbet af en seriel interface, som jeg er ved hjælp af en UART.CMOSExod Micro UART.I mig ude af stand til at afgøre, om mit Logic er korrekt, så jeg vil gerne vide, om følgende kode vil tjene mit formål.
Code:
modul Input (
input CLK,
input RxD,
output [31:0] FreqW,
output [31:0] PW,
output [31:0] PW2,
output [31:0] Delay,
output [31:0] Delay2
);////////////////////////////////////////////////// ////////////////////////////////
/ / Parameter erklæringen. / /
////////////////////////////////////////////////// ////////////////////////////////
parameter Increment1K = 42949;
parameter Increment1M = 42949672;
parameter IDLE = 6'b000001;
parameter ADR = 6'b000010;
parameter D0 = 6'b000100;
parameter D1 = 6'b001000;
parameter D2 = 6'b010000;
parameter D3 = 6'b100000;////////////////////////////////////////////////// ////////////////////////////////
/ / Fo og Wire erklæringen. / /
////////////////////////////////////////////////// ////////////////////////////////
reg [31:0] FrequencyWord = Increment1M * 2;
reg [31:0] Pulse_Width = 25;
reg [31:0] Pulse_Width2;
reg [31:0] Delay_Hold = 32'h00000005;
reg [31:0] Delay_Hold2;
reg [31:0] Data;
/ / Byte Counter.
reg [5:0] ByteCounter;
/ / Data Edge Detector
reg [1:0] DataRdy;
wire DataReady;
/ / Afkod Adresse
reg [7:0] Adr;
/ / UART Wires.
wire RxD_data_ready;
wire [7:0] RxD_data;
wire Baud_Clk;
////////////////////////////////////////////////// ////////////////////////////////
/ / USART Receiver og dekoder. / /
////////////////////////////////////////////////// ///////////////////////////////// / Instantiate modulet
u_rec Receiver (
. sys_rst_l (1),
. sys_clk (Baud_Clk),
. uart_dataH (RxD),
. rec_dataH (RxD_data),
. rec_readyH (RxD_data_ready)
);/ / Instantiate modulet
baud Baud_Generator (
. sys_clk (CLK),
. sys_rst_l (1),
. baud_clk (Baud_Clk)
);////////////////////////////////////////////////// ////////////////////////////////
/ / Data Decoder eller Parser / /
////////////////////////////////////////////////// ///////////////////////////////// / Shift Register at lagre hvis Data Ready stat.
altid @ (posedge CLK)
DataRdy <= (DataRdy [0], RxD_data_ready);/ / Datatilgængeligheden Bit.
tildele DataReady = (DataRdy == 2'b01)?
1'b1: 1'b0;altid @ (posedge CLK)
begynd
if (DataReady)
begynd
sagen (ByteCounter)
IDLE: ByteCounter = ADR;
ADR: ByteCounter = D0;
D0: ByteCounter = D1;
D1: ByteCounter = D2;
D2: ByteCounter = D3;
D3: ByteCounter = IDLE;
Standard: ByteCounter = IDLE;
endcase
ende
endealtid @ (posedge CLK)
begynd
if (ByteCounter == ADR)
Adr = RxD_data;
ellers hvis (ByteCounter == D0)
Data = (Data [31:8], RxD_data);
ellers hvis (ByteCounter == D1)
Data = (Data [31:16], RxD_data, Data [7:0]);
ellers hvis (ByteCounter == D2)
Data = (Data [31:24], RxD_data, Data [15:0]);
ellers hvis (ByteCounter == D3)
Data = (RxD_data, Data [23:0]);
endealtid @ (posedge CLK)
begynd
sagen (Adr)
8'h41: FrequencyWord = Data;
8'h42: Pulse_Width = Data;
8'h43: Pulse_Width2 = Data;
8'h44: Delay_Hold = Data;
8'h45: Delay_Hold2 = Data;
Standard: FrequencyWord = FrequencyWord;
endcase
endetildele FreqW = FrequencyWord;
tildele PW = Pulse_Width;
tildele PW2 = Pulse_Width2;
tildele Delay = Delay_Hold;
tildele Delay2 = Delay_Hold2;endmodule
Jeg har brug for at tildele 6 registre deres værdi i løbet af en seriel interface, som jeg er ved hjælp af en UART.CMOSExod Micro UART.I mig ude af stand til at afgøre, om mit Logic er korrekt, så jeg vil gerne vide, om følgende kode vil tjene mit formål.
Code:
modul Input (
input CLK,
input RxD,
output [31:0] FreqW,
output [31:0] PW,
output [31:0] PW2,
output [31:0] Delay,
output [31:0] Delay2
);////////////////////////////////////////////////// ////////////////////////////////
/ / Parameter erklæringen. / /
////////////////////////////////////////////////// ////////////////////////////////
parameter Increment1K = 42949;
parameter Increment1M = 42949672;
parameter IDLE = 6'b000001;
parameter ADR = 6'b000010;
parameter D0 = 6'b000100;
parameter D1 = 6'b001000;
parameter D2 = 6'b010000;
parameter D3 = 6'b100000;////////////////////////////////////////////////// ////////////////////////////////
/ / Fo og Wire erklæringen. / /
////////////////////////////////////////////////// ////////////////////////////////
reg [31:0] FrequencyWord = Increment1M * 2;
reg [31:0] Pulse_Width = 25;
reg [31:0] Pulse_Width2;
reg [31:0] Delay_Hold = 32'h00000005;
reg [31:0] Delay_Hold2;
reg [31:0] Data;
/ / Byte Counter.
reg [5:0] ByteCounter;
/ / Data Edge Detector
reg [1:0] DataRdy;
wire DataReady;
/ / Afkod Adresse
reg [7:0] Adr;
/ / UART Wires.
wire RxD_data_ready;
wire [7:0] RxD_data;
wire Baud_Clk;
////////////////////////////////////////////////// ////////////////////////////////
/ / USART Receiver og dekoder. / /
////////////////////////////////////////////////// ///////////////////////////////// / Instantiate modulet
u_rec Receiver (
. sys_rst_l (1),
. sys_clk (Baud_Clk),
. uart_dataH (RxD),
. rec_dataH (RxD_data),
. rec_readyH (RxD_data_ready)
);/ / Instantiate modulet
baud Baud_Generator (
. sys_clk (CLK),
. sys_rst_l (1),
. baud_clk (Baud_Clk)
);////////////////////////////////////////////////// ////////////////////////////////
/ / Data Decoder eller Parser / /
////////////////////////////////////////////////// ///////////////////////////////// / Shift Register at lagre hvis Data Ready stat.
altid @ (posedge CLK)
DataRdy <= (DataRdy [0], RxD_data_ready);/ / Datatilgængeligheden Bit.
tildele DataReady = (DataRdy == 2'b01)?
1'b1: 1'b0;altid @ (posedge CLK)
begynd
if (DataReady)
begynd
sagen (ByteCounter)
IDLE: ByteCounter = ADR;
ADR: ByteCounter = D0;
D0: ByteCounter = D1;
D1: ByteCounter = D2;
D2: ByteCounter = D3;
D3: ByteCounter = IDLE;
Standard: ByteCounter = IDLE;
endcase
ende
endealtid @ (posedge CLK)
begynd
if (ByteCounter == ADR)
Adr = RxD_data;
ellers hvis (ByteCounter == D0)
Data = (Data [31:8], RxD_data);
ellers hvis (ByteCounter == D1)
Data = (Data [31:16], RxD_data, Data [7:0]);
ellers hvis (ByteCounter == D2)
Data = (Data [31:24], RxD_data, Data [15:0]);
ellers hvis (ByteCounter == D3)
Data = (RxD_data, Data [23:0]);
endealtid @ (posedge CLK)
begynd
sagen (Adr)
8'h41: FrequencyWord = Data;
8'h42: Pulse_Width = Data;
8'h43: Pulse_Width2 = Data;
8'h44: Delay_Hold = Data;
8'h45: Delay_Hold2 = Data;
Standard: FrequencyWord = FrequencyWord;
endcase
endetildele FreqW = FrequencyWord;
tildele PW = Pulse_Width;
tildele PW2 = Pulse_Width2;
tildele Delay = Delay_Hold;
tildele Delay2 = Delay_Hold2;endmodule