Mojo Board FPGA EP.5 - Timing Diagram !!!

IC TPIC6B595 คือ POWER SHIFT REGISTER ขนาด 8 บิต ใช้การสื่อสารแบบ SPI รับข้อมูลแบบอนุกรมและส่งออกแบบขนาน




ก่อนอื่นให้ทำการสร้าง clock ขึ้นมาก่อน

`timescale 1ns / 1ps
module Clk_2000Hz(
input Clk_In,
output Clk_Out
);
reg Clk_Out = 1'b0;
reg [27:0] Counter;
always@(posedge Clk_In) begin
Counter <= Counter + 1;
if ( Counter == 12_500) begin
Counter <= 0;
Clk_Out <= ~Clk_Out;
end
end
endmodule

ถัดมาให้สร้าง clock อีกตัวที่ความถี่น้อยกว่า

`timescale 1ns / 1ps
module Clk_1Hz(
input Clk_In,
output Clk_Out
);
reg Clk_Out = 1'b0;
reg [27:0] Counter;
always@(posedge Clk_In) begin
Counter <= Counter + 1;
if ( Counter == 25_000_000) begin
Counter <= 0;
Clk_Out <= ~Clk_Out;
end
end
endmodule

ถัดมาให้สร้าง 8 bit Driver_595 Module
`timescale 1ns / 1ps
module Drive_74595(Clock, Data_In, Shift, Latch, Data_Out);
//----------------------------CONTROL SIGNALS-----------------------------------
input Clock;
input [7:0] Data_In; // 8-bit input data
output Shift; // Shift -> Register CLK in FIFO Buffer
output Latch; // Latch --> Shift Register CLK
output Data_Out; // The serial data output
reg [7:0] Clk_Count; // Maximum 256 Input_Clock
reg R_Shift, R_Latch, R_DataO;
parameter nBit = 8; // Using (2*nBit+4) Input_Clock
//=================================================
always @ ( posedge Clock ) begin
Clk_Count <= Clk_Count + 1;
if( Clk_Count > (2*nBit + 4)) begin
Clk_Count <= 0;
end
//--- Shift Process ----------------------------------------
if((Clk_Count < 2*nBit) && ((Clk_Count%2) == 0)) begin
R_Shift <= 0;
R_Latch <= 0;
R_DataO <= Data_In[Clk_Count/2];
end
if((Clk_Count < 2*nBit) && ((Clk_Count%2) == 1)) begin
R_Shift <= 1;
R_Latch <= 0;
R_DataO <= Data_In[Clk_Count/2];
end
//--- Latch Process ----------------------------------------
if(Clk_Count == (2*nBit)) begin
R_Shift <= 0;
R_Latch <= 0;
R_DataO <= 0;
end
if(Clk_Count == (2*nBit+1)) begin
R_Shift <= 0;
R_Latch <= 1;
R_DataO <= 0;
end
//------------------------------------------------------
end
assign Shift = R_Shift;
assign Latch = R_Latch;
assign Data_Out = R_DataO;
endmodule

สร้าง UCF ไฟล์
NET "Clk_50MHz" LOC = P56 | IOSTANDARD = LVTTL;
NET "xCount<0>" LOC = P134 | IOSTANDARD = LVTTL;
NET "xCount<1>" LOC = P133 | IOSTANDARD = LVTTL;
NET "xCount<2>" LOC = P132 | IOSTANDARD = LVTTL;
NET "xCount<3>" LOC = P131 | IOSTANDARD = LVTTL;
NET "xCount<4>" LOC = P127 | IOSTANDARD = LVTTL;
NET "xCount<5>" LOC = P126 | IOSTANDARD = LVTTL;
NET "xCount<6>" LOC = P124 | IOSTANDARD = LVTTL;
NET "xCount<7>" LOC = P123 | IOSTANDARD = LVTTL;
NET "zData" LOC = P51 | IOSTANDARD = LVTTL ;
NET "zClock" LOC = P41 | IOSTANDARD = LVTTL ;
NET "zLatch" LOC = P35 | IOSTANDARD = LVTTL ;

สร้าง Schematic File

ก็จะได้โปรแกรมตามนั้น


ความคิดเห็น

บทความที่ได้รับความนิยม