Documente Academic
Documente Profesional
Documente Cultură
http://arh.pub.ro/lab/cid1
1/7
http://arh.pub.ro/lab/cid1
rese t
generator de impulsuri
cloc k
out Semnalul de iesire out are forma ca in figura de mai jos, unde tN este dat de numarul format din switchurile SW7-SW0:
clock
out tN
clock(50MHz)
SW7 - SW0
reset
div_freq
25kHz
factor in 8'b0
numarator
load 8
comparator
out
2/7
http://arh.pub.ro/lab/cid1
Pentru ca impulsul generat sa poata fi observat pe osciloscoapele din laborator, in modulul numarator s-a implementat si un divizor de ceas, care realizeaza prin registrul clk un clock de 25 kHz, din ceasul original de 50 Mhz. Codul verilog pentru generatorul de impulsuri este mai jos:
module generator_de_impulsuri ( input reset, input clock, input[7:0] sw, output out ); wire[7:0] numar; wire clk; div_freq divizor_frecventa1 ( .reset(reset), .clock(clock), // frecventa clock = 50 Mhz = 50 000kHz .factor(24'd999), .freq_out(clk) // frecventa clk = frecv clock/(2+2*999)=25kHz ); numarator numarator1 (.reset (reset), // numarator pe 8 biti .clock (clk), .load(out), .in(8'b0), .out (numar) ); comparator comparator1(.a(sw), .b(numar), .equals(out) ); endmodule // generator_de_impulsuri module comparator ( input[7:0] a, input[7:0] b, output equals ); assign equals = (a==b); endmodule // comparator module numarator ( input reset, input clock, input load, input[7:0] in, // cand load este 1, ncarcam in n numarator 3/7
http://arh.pub.ro/lab/cid1
output reg [7:0] out ); always @ (posedge clock or posedge reset) begin if (reset) begin out <= 0; end else begin if (load) out <= in; else out <= out +1; end end endmodule // numarator 8 biti
Sa se faca sinteza circuitului dupa cum urmeaza:
intrarea reset trebuie asignata la BTN0; intrarea clock se leaga la generatorul ceas extern(P77) intrarea sw trebuie asignata la SW7 SW0 iesirea out trebuie asignata la P49 si vizualizata pe osciloscop.
La intrarea osciloscopului sunt conectate 3 cabluri. Pe fiecare dintre ele este scris un numar care reprezinta numarul pinului FPGA-ului la care este conectat. In acest exemplu o sa avem nevoie doar de canalul 1 al osciloscopului (P59). In sectiunea source a osciloscopului se vor seta CH1 si LINE ca in figura de mai jos:
4/7
http://arh.pub.ro/lab/cid1
module pulse_width_modulation ( input reset, input clock, input[7:0] sw, output reg out ); reg[7:0] counter; always @(posedge clock or posedge reset) begin if (reset) begin counter <= 0; out <= 0; end else begin counter <= counter + 1; if(counter < sw) begin out <= 1; end else begin out <= 0; end end end endmodule
Sa se faca sinteza circuitului dupa cum urmeaza: Spartan 3 (vezi placa) T9 (vezi placa) N11
intrarea reset trebuie asignata la BTN0; intrarea clock se leaga la generatorul ceas extern (P77) intrarea sw trebuie asignata la SW7 SW0 iesirea out trebuie asignata la P49 si vizualizata pe osciloscop.
5/7
http://arh.pub.ro/lab/cid1
primii biti sunt 010 (pentru a recunoaste usor secvanta pe ecranul osciloscopului) ceilalti 5 biti sunt date utile (se incarca de la switch-urile SW4-SW0) transmite un semnal de clock (ck) pentru a valida fiecare bit de date transmite un semnal de date (data) pentru fiecare bit de date transmite un semnal de sincronizare (sync) care are un singur scop: sa sincronizeze osciloscopul cu semnalele de date si ceas
module serial ( input reset, input clock, input[4:0] sw, output reg sync, output reg ck, output reg data ); reg[18:0] counter; always@(posedge clock or posedge reset) begin if (reset) begin sync <= 0; ck <= 0; data <= 0; counter <= 0; end else begin sync <= counter[18]; ck <= counter[15]; data <= {sw[4:0], 3'b010} >> counter[18:16]; counter <= counter + 1; end end endmodule //{} este concatenare de biti --> sw[4] sw[3] sw[2] sw[1] sw[0] 0 1 0
MSB LSB
sw[0] sw[1]
sw[2]
sw[3]
sw[4]
Spartan 3 intrarea reset trebuie asignata la BTN0; (vezi placa) intrarea clock se leaga la generatorul ceas extern(P77) T9 intrarea sw trebuie asignata la SW4 SW0 (vezi placa) iesirea sync trebuie asignata la pinul P47(sincronizarea externa a osciloscopului) P10 iesirea ck trebuie asignata la P48(canalul 2 al osciloscopului) si vizualizata pe osciloscop T3 iesirea data trebuie asignata la P49(canalul 1 al osciloscopului) si vizualizata pe osciloscop N11
6/7
http://arh.pub.ro/lab/cid1
Pentru a vizualiza forma de unda a semnalelor ck si data pe osciloscop trebuie sa folosim un semnal sync care trigereaza sincronizarea externa a osciloscopului. In sectiunea source a osciloscopului se vor seta EXT si EXT ca in figura de mai jos:
ATENTIE: In acest laborator se va folosi osciloscopul. Este foarte indicata reamintirea utilizarii osciloscopului:
http://www.comm.pub.ro/curs/metc/platf/lab2.pdf module test_modelsim; reg clock, rst; wire sgn_out; //tipar pentru simulare in Modelsim
7/7
initial begin clock = 0; forever #2 clock = ~clock; end initial begin rst = 1; #5 rst =0; end //aici se introduc instantele de module si alte modificari de parametri endmodule