Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module ps8(input CLOCK_50,
- input [2:0] SW,
- input [1:0] KEY,
- output [0:0] LEDR);
- wire C;
- delay_0_5_sec(CLOCK_50, C);
- FSM_Morse_code(SW, C, KEY[1], KEY[0], LEDR[0]);
- endmodule
- module delay_0_5_sec(input CLK,
- output Q);
- wire [25:0] A;
- wire E;
- counter_mod_M #(25000000) ex0(CLK, 1'b1, 1'b1, A);
- assign E = ~|A;
- counter_mod_M #(2) ex1(CLK, 1'b1, E, Q);
- endmodule
- module counter_mod_M #(parameter M = 8) (input CLK, ACLR, ENABLE,
- output reg [N - 1:0] Q);
- localparam N = clogb2(M - 1);
- function integer clogb2(input [31:0] v);
- for (clogb2 = 0; v > 0; clogb2 = clogb2 + 1)
- v = v >> 1;
- endfunction
- always@(posedge CLK, negedge ACLR)
- if(~ACLR) Q <= {N{1'b0}};
- else if(Q == M - 1) Q <= {N{1'b0}};
- else if(ENABLE) Q <= Q + 1'b1;
- else Q <= Q;
- endmodule
- module FSM_Morse_code(input [2:0] W,
- input CLK, ENABLE, ACLR,
- output reg Z);
- reg [0:0] YQ, YD;
- reg [0:13] ZNAK;
- localparam [0:0] SWIECI = 1'b1,
- NIESWIECI = 1'b0;
- localparam [0:13] A = 14'b01011100000000,
- B = 14'b01110101010000,
- C = 14'b01110101110100,
- D = 14'b01110101000000,
- E = 14'b01000000000000,
- F = 14'b01010111010000,
- G = 14'b01110111010000,
- H = 14'b01010101000000;
- integer I = 0;
- integer START = 0;
- always @(*)
- case (W)
- 3'b000: ZNAK = A;
- 3'b001: ZNAK = B;
- 3'b010: ZNAK = C;
- 3'b011: ZNAK = D;
- 3'b100: ZNAK = E;
- 3'b101: ZNAK = F;
- 3'b110: ZNAK = G;
- 3'b111: ZNAK = H;
- default: ZNAK = 14'bxxxxxxxxxxxxxx;
- endcase
- always @(*)
- case (YQ)
- SWIECI: if(ZNAK[I] == 0)
- YD = NIESWIECI;
- else if(ZNAK[I] == 1)
- YD = SWIECI;
- else
- YD = 1'bx;
- NIESWIECI: if(ZNAK[I] == 0)
- YD = NIESWIECI;
- else if(ZNAK[I] == 1)
- YD = SWIECI;
- else
- YD = 1'bx;
- default: YD = 1'bx;
- endcase
- always @(posedge CLK, negedge ACLR)
- if(~ACLR)
- begin
- YQ <= 0;
- I <= 0;
- START <= 0;
- end
- else if(I > 12 || (ZNAK[I] == 0 && ZNAK[I + 1] == 0))
- begin
- YQ <= 0;
- I <= 0;
- START <= 0;
- end
- else if(~ENABLE || START == 1)
- begin
- YQ = YD;
- START <= 1;
- I <= I + 1;
- end
- else
- YQ <= YQ;
- always @(*)
- Z = YQ;
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement