From f65a8de67cf1786c883b51199ca821ebe5ef271c Mon Sep 17 00:00:00 2001 From: musabe24 Date: Tue, 27 Feb 2024 11:52:07 +0100 Subject: [PATCH] Aufgabe bearbeitet. --- labor_3/res/ampel/sim/vsim.wlf | Bin 73728 -> 73728 bytes labor_3/Übungen/ampel/sim/modelsim.ini | 324 ++++++++++++++++++ labor_3/Übungen/ampel/sim/sim.tcl | 3 +- labor_3/Übungen/ampel/sim/vsim.wlf | Bin 0 -> 81920 bytes labor_3/Übungen/ampel/sim/work/_info | 63 ++++ labor_3/Übungen/ampel/sim/work/_vmake | 3 + .../Übungen/ampel/sim/work/ampel/_primary.dat | Bin 0 -> 4341 bytes .../Übungen/ampel/sim/work/ampel/_primary.dbs | Bin 0 -> 6075 bytes .../Übungen/ampel/sim/work/ampel/_primary.vhd | 32 ++ .../Übungen/ampel/sim/work/ampel/verilog.prw | Bin 0 -> 2109 bytes .../Übungen/ampel/sim/work/ampel/verilog.psm | Bin 0 -> 47064 bytes .../sim/work/mod_n_counter_10bit/_primary.dat | Bin 0 -> 506 bytes .../sim/work/mod_n_counter_10bit/_primary.dbs | Bin 0 -> 651 bytes .../sim/work/mod_n_counter_10bit/_primary.vhd | 16 + .../sim/work/mod_n_counter_10bit/verilog.prw | Bin 0 -> 304 bytes .../sim/work/mod_n_counter_10bit/verilog.psm | Bin 0 -> 6352 bytes .../ampel/sim/work/tb_ampel/_primary.dat | Bin 0 -> 939 bytes .../ampel/sim/work/tb_ampel/_primary.dbs | Bin 0 -> 1173 bytes .../ampel/sim/work/tb_ampel/_primary.vhd | 4 + .../ampel/sim/work/tb_ampel/verilog.prw | Bin 0 -> 558 bytes .../ampel/sim/work/tb_ampel/verilog.psm | Bin 0 -> 8016 bytes labor_3/Übungen/ampel/src/ampel.v | 307 +++++++++++++++++ labor_3/Übungen/ampel/src/ampel.v.bak | 307 +++++++++++++++++ labor_3/Übungen/ampel/src/ampel_wo_src.v | 159 --------- labor_3/Übungen/ampel/src/jk_ff.v | 38 ++ 25 files changed, 1096 insertions(+), 160 deletions(-) create mode 100644 labor_3/Übungen/ampel/sim/modelsim.ini create mode 100644 labor_3/Übungen/ampel/sim/vsim.wlf create mode 100644 labor_3/Übungen/ampel/sim/work/_info create mode 100644 labor_3/Übungen/ampel/sim/work/_vmake create mode 100644 labor_3/Übungen/ampel/sim/work/ampel/_primary.dat create mode 100644 labor_3/Übungen/ampel/sim/work/ampel/_primary.dbs create mode 100644 labor_3/Übungen/ampel/sim/work/ampel/_primary.vhd create mode 100644 labor_3/Übungen/ampel/sim/work/ampel/verilog.prw create mode 100644 labor_3/Übungen/ampel/sim/work/ampel/verilog.psm create mode 100644 labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.dat create mode 100644 labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.dbs create mode 100644 labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.vhd create mode 100644 labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/verilog.prw create mode 100644 labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/verilog.psm create mode 100644 labor_3/Übungen/ampel/sim/work/tb_ampel/_primary.dat create mode 100644 labor_3/Übungen/ampel/sim/work/tb_ampel/_primary.dbs create mode 100644 labor_3/Übungen/ampel/sim/work/tb_ampel/_primary.vhd create mode 100644 labor_3/Übungen/ampel/sim/work/tb_ampel/verilog.prw create mode 100644 labor_3/Übungen/ampel/sim/work/tb_ampel/verilog.psm create mode 100644 labor_3/Übungen/ampel/src/ampel.v create mode 100644 labor_3/Übungen/ampel/src/ampel.v.bak delete mode 100644 labor_3/Übungen/ampel/src/ampel_wo_src.v create mode 100644 labor_3/Übungen/ampel/src/jk_ff.v diff --git a/labor_3/res/ampel/sim/vsim.wlf b/labor_3/res/ampel/sim/vsim.wlf index 788f89b7bff9780dcbebb1aaf3babd3d327375ed..fe649355198b25d4456bff831f2a7a7b803236f4 100644 GIT binary patch delta 21 ccmZoTz|wGlg-M`nB9k_wOrzdbJ;qD&0801 500 megabyte memory footprint). Default is disabled. +; Specify number of megabytes to lock. +; LockedMemory = 1000 + +; Turn on (1) or off (0) WLF file compression. +; The default is 1 (compress WLF file). +; WLFCompress = 0 + +; Specify whether to save all design hierarchy (1) in the WLF file +; or only regions containing logged signals (0). +; The default is 0 (save only regions with logged signals). +; WLFSaveAllRegions = 1 + +; WLF file time limit. Limit WLF file by time, as closely as possible, +; to the specified amount of simulation time. When the limit is exceeded +; the earliest times get truncated from the file. +; If both time and size limits are specified the most restrictive is used. +; UserTimeUnits are used if time units are not specified. +; The default is 0 (no limit). Example: WLFTimeLimit = {100 ms} +; WLFTimeLimit = 0 + +; WLF file size limit. Limit WLF file size, as closely as possible, +; to the specified number of megabytes. If both time and size limits +; are specified then the most restrictive is used. +; The default is 0 (no limit). +; WLFSizeLimit = 1000 + +; Specify whether or not a WLF file should be deleted when the +; simulation ends. A value of 1 will cause the WLF file to be deleted. +; The default is 0 (do not delete WLF file when simulation ends). +; WLFDeleteOnQuit = 1 + +; Automatic SDF compilation +; Disables automatic compilation of SDF files in flows that support it. +; Default is on, uncomment to turn off. +; NoAutoSDFCompile = 1 + +[lmc] + +[msg_system] +; Change a message severity or suppress a message. +; The format is: = [,...] +; Examples: +; note = 3009 +; warning = 3033 +; error = 3010,3016 +; fatal = 3016,3033 +; suppress = 3009,3016,3043 +; The command verror can be used to get the complete +; description of a message. + +; Control transcripting of elaboration/runtime messages. +; The default is to have messages appear in the transcript and +; recorded in the wlf file (messages that are recorded in the +; wlf file can be viewed in the MsgViewer). The other settings +; are to send messages only to the transcript or only to the +; wlf file. The valid values are +; both {default} +; tran {transcript only} +; wlf {wlf file only} +; msgmode = both diff --git a/labor_3/Übungen/ampel/sim/sim.tcl b/labor_3/Übungen/ampel/sim/sim.tcl index 1773ef0..1b31acb 100644 --- a/labor_3/Übungen/ampel/sim/sim.tcl +++ b/labor_3/Übungen/ampel/sim/sim.tcl @@ -10,7 +10,8 @@ vmap work work #Top level testbench vlog tb_ampel.v -#vlog ../src/ampel.v +define+SIMULATION +vlog ../src/ampel.v +define+SIMULATION +vlog ../src/mod_n_counter_10bit.v #Simulate #vsim -c -t ps -L ampel tb_ampel diff --git a/labor_3/Übungen/ampel/sim/vsim.wlf b/labor_3/Übungen/ampel/sim/vsim.wlf new file mode 100644 index 0000000000000000000000000000000000000000..13b9f04d04f1acea9b1a1fcde0ee869cb0e48f24 GIT binary patch literal 81920 zcmeI)Piz!b9KiA4n|W_$wuNrHEf!0)yW7PWV!PdzAgr#^b{8mx(sa9MNMl{>APu{; z=|3bUriUgCClRADUL;&h)QBhJMZ(c=@Tdnb98C1&(d+uQ*wRD~U55Ho$BusagkAJJh{ABJ{vDA%!JiwzEB*UJT=~PvN%3) zaA0)%1mVvM-Ty@f<(%`)!lSn~G7zm~vItFX-%Dlg$Mq{&M31Wsduw>*e)GL({Ht75BgSs&iGo zuwieIKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|00D&!mdaZvWYBlw% zEy~-rQU6zx6SJ~7TfHE;`dj~A&XIxP>{Pk36v{$*Dl^dAwy^N#>=jZd~rLv??%)M2vq$ee;&ZkcoPnBfyTzIg0`D{)c z-ShVHY|ae=m6lIMbYr*j8kWw=bh$boR(e+wswoIeR5{(AzBIRR=7MfjKgFC5>1w%R z0@ECm{rh!1NbZ(`QEgY<;S;0!fFBQ9&9jakpD0dV^t*JMdBt^#4X^pRU2Px84M)4; z$*O8^IyNY!@yX)k#Po@)BV(gQJ+Hd+?z`>MlXAsX*OH$0wR(NEy=km4R2Vad-cUaz z&7p`Cl7Wo)YI;PisonZdN7h=7l!~jxql1O9qXo16v3kzEcI;_cS05$SdZTX;-|Uq0 zd2_Q>mYm3M5{Yzvxv`02-@WI~5dj1cKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0;re=kt4>u;<7%S$$|w|bw>M{R}sx^5V9d{fghp}KS`bzAp3{yxv7Vs~}X@%@}m zsVlnM^#h$cXWz{)*)YTQasmMa5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009IZlR&-Bzg7Q#Olz_X0tg_000IagfB*srAbe]M?9Rf^BY>j0 +Z2 VRO2_FXGbKEQ9Ta:hdNfS10 +!s85 0 +Z9 !s108 1708618418.950000 +Z10 !s107 ../src/ampel.v| +Z11 !s90 -reportprogress|300|../src/ampel.v|+define+SIMULATION| +!s101 -O0 +Z12 !s92 +define+SIMULATION -O0 +vmod_n_counter_10bit +!i10b 1 +!s100 9e`GV_]:ML:l92jkefb>Q0 +IlLNUY`h`GTJ1?TjLj1BUS2 +VOCKRzhG[H7hm^_`n>48^e3 +R3 +Z13 w1708542298 +8../src/mod_n_counter_10bit.v +F../src/mod_n_counter_10bit.v +L0 1 +R7 +r1 +!s85 0 +31 +!s108 1708618419.009000 +!s107 ../src/mod_n_counter_10bit.v| +!s90 -reportprogress|300|../src/mod_n_counter_10bit.v| +!s101 -O0 +o-O0 +vtb_ampel +Z14 I:0IMZj9F7dM=NBGQ@:fYS0 +Z15 V6nf?5m:3VQD@E=_a?l5VH1 +R3 +R13 +Z16 8tb_ampel.v +Z17 Ftb_ampel.v +L0 17 +R7 +r1 +31 +o-O0 +Z18 !s100 1oY2jolgFK??ee;z]EH8c2 +Z19 !s108 1708618418.897000 +Z20 !s107 tb_ampel.v| +Z21 !s90 -reportprogress|300|tb_ampel.v| +!i10b 1 +!s85 0 +!s101 -O0 diff --git a/labor_3/Übungen/ampel/sim/work/_vmake b/labor_3/Übungen/ampel/sim/work/_vmake new file mode 100644 index 0000000..2f7e729 --- /dev/null +++ b/labor_3/Übungen/ampel/sim/work/_vmake @@ -0,0 +1,3 @@ +m255 +K3 +cModel Technology diff --git a/labor_3/Übungen/ampel/sim/work/ampel/_primary.dat b/labor_3/Übungen/ampel/sim/work/ampel/_primary.dat new file mode 100644 index 0000000000000000000000000000000000000000..6b778ede10242fa996d4a0e8c12f2885ea2e6908 GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/ampel/_primary.dbs b/labor_3/Übungen/ampel/sim/work/ampel/_primary.dbs new file mode 100644 index 0000000000000000000000000000000000000000..04fd69dd6ad90acb4c8e4a95fcc780083fe1700b GIT binary patch literal 6075 zcmbW5c~lfv7RFz76^kH^D9X|bv>Od5Zb(oNMNt_=L0Au#^T)9@2lV2zPD7< zC9L>XowNVXL$yne{s}&M1m?_{Fym%-2AALni3-94f-$itBq-HPK-mitD_P=A(TSvp z(wU@$(uJf2N>`GWC^aOpL9sVUYm|L3fl#w9nDc-Hi`l>*NG(ZQlzmBdMcE$`9G(rc zLpgw?8s$Ke_9#6`c0;Kn>44IkB+icL1Bo(>9w-Nq#90#ulf+pQeM#c1i9<=^tck-& z;;e}yAi*&^F`PBgk0j2TIFcmJn)nV$oHa3kq&#b*NV*{ngapUz#N1H^k@P@0h9u6Z zI1UmVh9ko{6+=k&Lph!#PO%tD5~o<4ND`-5oJ10*Se#4}r&#)fQ8H^U$f3g3#!E)H zVVHy?!MVd7ftQHo5b5L^0>kBzrb2=xnKd?nlWQt3BixEi!Ue+RG9eLbA<{9-2@IE3 z3Wr2#3K1@hsl1FjX$os8O<_)u`;n$WR%r?cjEhQ5AyS&ceS*8jghUh4G0X`vlp-Lj zG=Ð-xFYj5=uwYbm3`oWO89O4A`xn!+uCn~9o2q%?(7j-^dVG$9?soWO=)(MU*? zrm!4tL{oVgbJb$KIA~vWD7;}Q` zMo5&iIN>;0Dak0A4j(c)2vc=cG6<-af(e919+I@uD49+Txd9NS3Q{T|d&muZ1F2Sl zfM(J$fzU92NTm#;WI8*@^@pIgHh_>%9*;J5jy83QR9gT+m)jswCK(q56?KV1?oz^o zi@U)Z0xuDf4TMgvA;{A#92&$51aHUA#QMc3H5*+KCw)bC4EMy8{|A8$Wk#O zZiI&kaU=Yk5I4dv2yr7kLI@w8cvwv%v_gc($&2AP(gKJehz_`lEC*+WFK~K4cJgZf z_cyrc(|QG@HXbt!=oZ;0=SXqHG%WK=uf!&)1S;U-Gac7)DIw0}2|}F7lY}^vWrVoC zP7&fvB2rA^7wcRIbCXfwh3i|UmxbEpxop;yIxemvcVAMoT#si6aqi9%;@p)J;@njb z;`%yAh;xTXaTg4^IS}UVX3pE3Y8!qyRr4Tud5dA;lrP&7LVJZUlZc&T_nWW zt0ctPyF`ey_YEP=9wNowSjf$TFt-;y;aN+oSBcM)ruh#ti{9INYVOINugT$MYMSfy z8X?YM4I$3qbwZrO8-%#NZW7`gB2pZVgIp|xxkGsYV-GGFlfCdr%i(tdn{593_(kku z@^}mCbh3)K32{SeAjH{kB*fXjM~Jh3pAgqq6Cut%BE|mye>#7lX1N}JBE-3CA;h`+ znGomh5h1RxRzjRRM2fo*$i+dJFYcU)7OQ%X{HH!OHQ6c8-q0`2a_u>r;xHYp?h~k_ ztS;BFo)Bl!K!`K>f)Ho&S3+E0ZG(!1B=TJ?Eb7)V9bJ&d#*Ovn!&LN_=T|Y-^mg~`(kokW`Di=WT z3s?gm_`ir38xLs|g!$=+oN)H!IF~`^?H{+g?Ck#&9*U=;w&9u78>-^Juj;N7AjSI~ z9gKxSUg|?=qB(LSG|3#f6Pj#}JP3uEArT$e!c7{Ny z$deFfNJoe>gbox#Q^1y$4@kw(RFLmN{Qe60UhpxLe4XHk%b<6S^N;);ZnV|UD|}hk{9f(6hxtJl+)Bsok6YL3FnCzZ zn$gYCYg3*V=H!j?*>}U+@L)$>^U;RvLPOTn&(3c9D8?`B>Q`53#6=Bppak2=3)dE>_D^orW`?FXIal7Z4N`nYy!ZK$6n-_!Y!r#3i$ zX8P{clYI6?jk=H!^KoeW?5g0Bi>mangzBA_Ya%U2Rc>DqxA+aLTi zo6|#w)V$lPdaI*bjaR(3<9eUzJBxO?5iz>2!p*<;I6>L-W(m~Xu})va$p)s&Y>1%8Xl z+m6igNqBf*!wK8)y2s`IL0#_LIdP}fDgcW{{W|Luo(aV literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/ampel/_primary.vhd b/labor_3/Übungen/ampel/sim/work/ampel/_primary.vhd new file mode 100644 index 0000000..706b9fd --- /dev/null +++ b/labor_3/Übungen/ampel/sim/work/ampel/_primary.vhd @@ -0,0 +1,32 @@ +library verilog; +use verilog.vl_types.all; +entity ampel is + generic( + FUSS_AUS : vl_logic_vector(0 to 1) := (Hi0, Hi0); + FUSS_ROT : vl_logic_vector(0 to 1) := (Hi1, Hi0); + FUSS_GRUEN : vl_logic_vector(0 to 1) := (Hi0, Hi1); + AUTO_AUS : vl_logic_vector(0 to 2) := (Hi0, Hi0, Hi0); + AUTO_ROT : vl_logic_vector(0 to 2) := (Hi1, Hi0, Hi0); + AUTO_GELB : vl_logic_vector(0 to 2) := (Hi0, Hi1, Hi0); + AUTO_GRUEN : vl_logic_vector(0 to 2) := (Hi0, Hi0, Hi1) + ); + port( + CLOCK_50 : in vl_logic; + KEY : in vl_logic_vector(1 downto 0); + LEDH_L : out vl_logic_vector(2 downto 0); + LEDH_R : out vl_logic_vector(2 downto 0); + LEDN_L : out vl_logic_vector(2 downto 0); + LEDN_R : out vl_logic_vector(2 downto 0); + LEDF_L : out vl_logic_vector(1 downto 0); + LEDF_R : out vl_logic_vector(1 downto 0); + DBG : out vl_logic + ); + attribute mti_svvh_generic_type : integer; + attribute mti_svvh_generic_type of FUSS_AUS : constant is 1; + attribute mti_svvh_generic_type of FUSS_ROT : constant is 1; + attribute mti_svvh_generic_type of FUSS_GRUEN : constant is 1; + attribute mti_svvh_generic_type of AUTO_AUS : constant is 1; + attribute mti_svvh_generic_type of AUTO_ROT : constant is 1; + attribute mti_svvh_generic_type of AUTO_GELB : constant is 1; + attribute mti_svvh_generic_type of AUTO_GRUEN : constant is 1; +end ampel; diff --git a/labor_3/Übungen/ampel/sim/work/ampel/verilog.prw b/labor_3/Übungen/ampel/sim/work/ampel/verilog.prw new file mode 100644 index 0000000000000000000000000000000000000000..8457ff938e2c24c8ad8c55dcc4c26f24695c4501 GIT binary patch literal 2109 zcmb_e%TC)s6usfmF1zUmjFcbncLv52}s-t`w)cGnN> zJ$J^BBvfKiM7W-N9``YhL~vxj4Cw72;-3SKzXwEz9FO_@j^i(m?;Sp%DdL&Wkwf= z92@_U)3tcMjYkfjrYBN&y6-!6zSF*M-1%BOr!9Q!@bmd>2K^*Sg*QoanUniDcfRM& zH^$kcVT`$3Jf{ZNf(N9*U;QX6oWK4oB~Ki&2cFyVLd)AMU*`4nK73g3Z|O&S`Ym2h zZ=BwU{?XNs_w-x5)9m^bx~tOeB{|7t|HQHHqmA|H_@O8D%FqMvLz=AK9yMd%aEaLh61_r0-AFl;-Ha z&F9zBH*ti%c|XgYJlD1JQBt6fRzFEI_?}RjA>ZnE>S?6|^`s&dRu#u5wW;p(ea#PA z^IuOzrdGAmJ%X+P`y&g7fc>h|TiCD+YG&2SEIK&wpbo|sjsS<=E*v`ZSm2)d2)1gp zwrV!1xkRV7aI_RS=1R4SO#?$2F9gzF0Bqc1YBL6+7Pf8e$ykeJqg9&+({LWFz4m0b zWyqX0OP|ydfT~!^lWR|!U->P(S&db7=iRHd58m2W>jz8KcE?_41@1=k!I~BD2ze=HS)v#?HGri|5$ZLr!Y;&bzqi yc5$gMyQ>thYh>*3n1gRZZzZuTZ02>z*UQ0tz3+cu#_lx<`Ac8d_-8>K5&Z>|FU$S_ literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/ampel/verilog.psm b/labor_3/Übungen/ampel/sim/work/ampel/verilog.psm new file mode 100644 index 0000000000000000000000000000000000000000..8de7bcda1fadd13537bd81cbf8e1c6b0a3f75882 GIT binary patch literal 47064 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 literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.dbs b/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.dbs new file mode 100644 index 0000000000000000000000000000000000000000..41edf636829afdbbb812c4af7b9ecc179552d489 GIT binary patch literal 651 zcmZQ9IK|iQGsB><2}nGVHA;Lufm4_P2pAcG1QQS|05JmtGlK&}Pb0;IuGAa^jZV7LaP z3*-R?77z*Y6qpC3nL$z@|7$RSSd3sFFv$a%3=AL}7#L18>kB(OI?H}}plaw^Ao2Q% zsGxS*&ytAnS@Reps+UNfx@O>9zdp?Vy0g0NtHj6kF{>&npHBMHU~B#1EBDVCQaf(- zhGu{q>BoFwf!&Q?0(aHqt!lX2=dI^oTqwLiwzd54xj+_>6Tm?X3IY(|WqfsgpM}>f zr{v@6ra^lTdhV}W0`V-!aV#2OMG!p@zd&LQsAM8k$~hp2@An-B22iAdLXTwuR00(5 d5CDomkcCVv!q8v@$w8Q)-~eGJ&dE!E0|4LlN_YSO literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.vhd b/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.vhd new file mode 100644 index 0000000..5969a9e --- /dev/null +++ b/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.vhd @@ -0,0 +1,16 @@ +library verilog; +use verilog.vl_types.all; +entity mod_n_counter_10bit is + generic( + N : integer := 10 + ); + port( + CLK : in vl_logic; + RST : in vl_logic; + EN : in vl_logic; + Q : out vl_logic_vector(9 downto 0); + TC : out vl_logic + ); + attribute mti_svvh_generic_type : integer; + attribute mti_svvh_generic_type of N : constant is 1; +end mod_n_counter_10bit; diff --git a/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/verilog.prw b/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/verilog.prw new file mode 100644 index 0000000000000000000000000000000000000000..1f0d70b1900cca11b54a7750861a7f0608249fee GIT binary patch literal 304 zcmXYrI}XAy42E5vBMSqgrCfldEtCyZF(9Cb($3{kkQjIfl?nA2y#WW|X#5UDcD~sE z?<8Ks-8$5M6IKlzgLSY8cEBFk{p$`jtII9V8q}(;+2JO9UW=pfk?Fp0e=bO*m&CMzEClCVh}! DoH#v@ literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/verilog.psm b/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/verilog.psm new file mode 100644 index 0000000000000000000000000000000000000000..963c66679a9a269955d3085e4bc591d259031d30 GIT binary patch literal 6352 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 S;FzBQZSTMwzWG)< zh`IAFOG!iEaR!F(m6y3Q0kv25?34sj3IY??}uH`MT)b^$IT;*pL zPdR22UhVcBZ0TEs6gNT&tP4qs2e%Y2LJHkLKA_YD{Zot#l@^=pD_>o{y<`(xaoCcz zAa%}>AUk>&@M{#wz7Rhe*|_B@1H($`dW%1$Y=>_=+PEZ%3n*`S?9*Jfn;icoZ^Sb) z9Mn1-HFJTmpUO=3V#X!RU{hGZrbq~AFv)UQh;n#KUNHuVFHQxC``#2-(J0F=$rU7; z0_0B6%#FXXo4wm5qywx*2&~4Oe?_e9cFC%suOJI2yv)6iMU4PVO~7H88V;Q1fb9aC zgP{g&j(BzC-({lg3>!WRrW_S~wsT9p+v`8ag|6+nmciEiDDddDwkF9ECE;V`{qHB9 zW9L|x=F72t<$>Vq%WpZ)n(SgGvMk#Z}0>tM<@FhWfzQgbSUc9{hS$^a7;2o?CM%zsC&zf0B z`3h&8e5*GpGy3JlXHyJ-yyLI^K)jnTvh>ypXB>Qd5yZRxj!SQq29{4^H;&P}Sc3tcI07(JWYCu&;G4KFcELu=5 zg9gZ>AaBELV9|z4frLOo0GHB*OJV5J$1PNq00mBu3VKWE~}r5ST+5xTkL8qSFO9s`}0**OU=XR(~r3) zR7_<$6mHcgV4Qc$>eX?}%5w)DJ}S7DE=||@6Fb$WOaK4Uh$Gb>)SJZhPqHcGEq3L* zTI?Y8%V*b}LChLI`Hz-0FLAe10U~)bT44~Kmg#tKf zg5*FM1B4+NKn_SVZUl1~7#@3sIVu9<7?f>58G_{iR03ol1SkS25N2Y01QmH4=zmcS z7$cyp1IiREAE6QmO(0z7hBdj=?E-1>SUVWnE8Dw6;729%Fb58Ei`7iD?=zAySga!D?;P9b*kR7Y z)8kD0;yo!*2mX^|`WzGQElz7o;zpXVL%buFoSLz1euY*Rk+n*Fu{kKEe418j-a zu+KW~c)mSrw@~di1D%#57= literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/tb_ampel/verilog.psm b/labor_3/Übungen/ampel/sim/work/tb_ampel/verilog.psm new file mode 100644 index 0000000000000000000000000000000000000000..ab56c209fa4e393fbb3155a15afb3cda8f584f0d GIT binary patch literal 8016 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 literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/src/ampel.v b/labor_3/Übungen/ampel/src/ampel.v new file mode 100644 index 0000000..ea5a876 --- /dev/null +++ b/labor_3/Übungen/ampel/src/ampel.v @@ -0,0 +1,307 @@ +/****************************************************** +* +* Description: Vorlage Ampelsteurerung +* Date: 05.01.2018 +* File Name: ampel_wo_src.v +* Version: 1.2 +* Target: Simulation and Synthesis +* Technology: +* +* Rev Author Date Changes +* ----------------------------------------------------- +* 1.0 RHK 10.10.2011 Initial Release +* 1.1 JZ 10.03.2016 several bugfixes +* 1.2 JZ 05.01.2018 angepasst auf neues Ampelboard +* 1.3 MW 07.03.2019 STATE Konstanten angepasst +*******************************************************/ + +`timescale 1ns / 1ps + +module ampel ( + input CLOCK_50, + input [1:0] KEY, + output [2:0] LEDH_L, + output [2:0] LEDH_R, + output [2:0] LEDN_L, + output [2:0] LEDN_R, + output [1:0] LEDF_L, + output [1:0] LEDF_R, + output reg DBG +); + +reg [9:0] CLKDIV1; +reg [9:0] CLKDIV2; +reg [9:0] CLKDIV3; + +reg MELDER; +reg MELDER_Q; +reg MELDER_QQ; +reg MELDER_ACK; +reg CLOCK_ENABLE; + +reg START_WARTEN; +reg [3:0] STATE; +reg [2:0] HAUPTSTR; +reg [2:0] NEBENSTR; +reg [1:0] FUSSGAENGER; + +reg [3:0] WARTEZAEHLER; +reg [3:0] WARTEWERT; + +wire en_div_1; +wire en_div_2; +wire en_div_3; + +wire tc_div_1; +wire tc_div_2; +wire tc_div_3; + +wire [9:0] q_div_1; +wire [9:0] q_div_2; +wire [9:0] q_div_3; + +// R Gr +parameter FUSS_AUS = 2'b00; +parameter FUSS_ROT = 2'b10; +parameter FUSS_GRUEN = 2'b01; +// R Ge Gr +parameter AUTO_AUS = 3'b000; +parameter AUTO_ROT = 3'b100; +parameter AUTO_GELB = 3'b010; +parameter AUTO_GRUEN = 3'b001; + +assign RESET = ~KEY[1]; + +assign LEDH_L = HAUPTSTR; +assign LEDH_R = HAUPTSTR; +assign LEDN_L = NEBENSTR; +assign LEDN_R = NEBENSTR; +assign LEDF_L = FUSSGAENGER; +assign LEDF_R = FUSSGAENGER; + +`ifdef SIMULATION +`define DIVVAL1 10-1 +`define DIVVAL3 5-1 +`else +`define DIVVAL1 1000-1 +`define DIVVAL3 50-1 +`endif + +`define FUSS_WARTEN 4 //Wartezeit +`define GELB_DAUER 4 //Wartezeit +`define FUSS_GRUEN_DAUER 4 //Wartezeit +`define ALLE_ROT_DAUER 4 //Wartezeit + +`define HAUPT_GRUEN_DAUER 4 //Wartezeit +`define NEBEN_GRUEN_DAUER 4 //Wartezeit + + +`define PHASEVAL 8 + +//clock divider to generate 1 Hz +// + +assign en_div_1 = 1'b1; +assign en_div_2 = tc_div_1; +assign en_div_3 = tc_div_1 & tc_div_2; + +always begin + CLOCK_ENABLE = tc_div_3; +end + +// synchronisze KEY to CLOCK_50 +always @(posedge CLOCK_50) begin + MELDER_Q = ~KEY[0]; + MELDER_QQ = MELDER_Q; +end + +// Melder sofort setzen +// Melder zuruecksetzen wenn die Anforderung von der Statemachine verarbeitet +// wurde. Die Ampelanlage gibt den FUSSGAENGERn nur dann gruen wenn +// ein Melder anstehst... +always @(posedge CLOCK_50 or negedge RESET) begin + if (RESET) + MELDER <= 1'b0; + else begin + case ({MELDER_QQ, MELDER_ACK}) + 2'b01: MELDER <= 1'b0; + 2'b10: MELDER <= 1'b1; + 2'b11: MELDER <= ~MELDER; + default: ; + endcase + end +end + +assign WARTEN_FERTIG = (WARTEZAEHLER == 4'b0000); + +//Wartezaehler +always @(posedge CLOCK_50 or RESET) begin + if(RESET) begin + WARTEZAEHLER <= WARTEWERT; + end + else if(CLOCK_ENABLE) begin + if (START_WARTEN) + WARTEZAEHLER <= WARTEWERT; + START_WARTEN <= 1'b0; + if (~WARTEN_FERTIG) + WARTEZAEHLER <= WARTEZAEHLER - 1'b1; + end +end + +always @(posedge CLOCK_50 or negedge RESET) + if (RESET) + begin + HAUPTSTR <= AUTO_GRUEN; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b0; + STATE <= 4'd0; + MELDER_ACK <= 1'b0; + end + else + if (CLOCK_ENABLE) + case (STATE) + 4'd0: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_GRUEN; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `HAUPT_GRUEN_DAUER; + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd1: begin + if(WARTEN_FERTIG) begin + HAUPTSTR = AUTO_GELB; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd2: begin + if(WARTEN_FERTIG && MELDER) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `FUSS_WARTEN; + MELDER_ACK <= 1'b1; + + end else if (WARTEN_FERTIG && ~MELDER) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `ALLE_ROT_DAUER; + + end else if(~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + end + end + 4'd3: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_GRUEN; + START_WARTEN <= 1'b1; + WARTEWERT <= `FUSS_GRUEN_DAUER; + MELDER_ACK <= 1'b0; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd4: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GELB|AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd5: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GRUEN; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `NEBEN_GRUEN_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd6: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GELB; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd7: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `ALLE_ROT_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd8: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_GELB|AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + default: + STATE <= 4'd1; + endcase + +mod_n_counter_10bit #(.N(`DIVVAL1)) clock_divider_1( + .CLK(CLOCK_50), + .RST(RESET), + .EN(en_div_1), + .Q(q_div_1), + .TC(tc_div_1) +); + +mod_n_counter_10bit #(.N(`DIVVAL1)) clock_divider_2( + .CLK(CLOCK_50), + .RST(RESET), + .EN(en_div_2), + .Q(q_div_2), + .TC(tc_div_2) +); + +mod_n_counter_10bit #(.N(`DIVVAL3)) clock_divider_3( + .CLK(CLOCK_50), + .RST(RESET), + .EN(en_div_3), + .Q(q_div_3), + .TC(tc_div_3) +); + +endmodule \ No newline at end of file diff --git a/labor_3/Übungen/ampel/src/ampel.v.bak b/labor_3/Übungen/ampel/src/ampel.v.bak new file mode 100644 index 0000000..18cac12 --- /dev/null +++ b/labor_3/Übungen/ampel/src/ampel.v.bak @@ -0,0 +1,307 @@ +/****************************************************** +* +* Description: Vorlage Ampelsteurerung +* Date: 05.01.2018 +* File Name: ampel_wo_src.v +* Version: 1.2 +* Target: Simulation and Synthesis +* Technology: +* +* Rev Author Date Changes +* ----------------------------------------------------- +* 1.0 RHK 10.10.2011 Initial Release +* 1.1 JZ 10.03.2016 several bugfixes +* 1.2 JZ 05.01.2018 angepasst auf neues Ampelboard +* 1.3 MW 07.03.2019 STATE Konstanten angepasst +*******************************************************/ + +`timescale 1ns / 1ps + +module ampel ( + input CLOCK_50, + input [1:0] KEY, + output [2:0] LEDH_L, + output [2:0] LEDH_R, + output [2:0] LEDN_L, + output [2:0] LEDN_R, + output [1:0] LEDF_L, + output [1:0] LEDF_R, + output reg DBG +); + +reg [9:0] CLKDIV1; +reg [9:0] CLKDIV2; +reg [9:0] CLKDIV3; + +reg MELDER; +reg MELDER_Q; +reg MELDER_QQ; +reg MELDER_ACK; +reg CLOCK_ENABLE; + +reg START_WARTEN; +reg [3:0] STATE; +reg [2:0] HAUPTSTR; +reg [2:0] NEBENSTR; +reg [1:0] FUSSGAENGER; + +reg [3:0] WARTEZAEHLER; +reg [3:0] WARTEWERT; + +wire en_div_1; +wire en_div_2; +wire en_div_3; + +wire tc_div_1; +wire tc_div_2; +wire tc_div_3; + +wire [9:0] q_div_1; +wire [9:0] q_div_2; +wire [9:0] q_div_3; + +// R Gr +parameter FUSS_AUS = 2'b00; +parameter FUSS_ROT = 2'b10; +parameter FUSS_GRUEN = 2'b01; +// R Ge Gr +parameter AUTO_AUS = 3'b000; +parameter AUTO_ROT = 3'b100; +parameter AUTO_GELB = 3'b010; +parameter AUTO_GRUEN = 3'b001; + +assign RESET = ~KEY[1]; + +assign LEDH_L = HAUPTSTR; +assign LEDH_R = HAUPTSTR; +assign LEDN_L = NEBENSTR; +assign LEDN_R = NEBENSTR; +assign LEDF_L = FUSSGAENGER; +assign LEDF_R = FUSSGAENGER; + +`ifdef SIMULATION +`define DIVVAL1 10-1 +`define DIVVAL3 5-1 +`else +`define DIVVAL1 1000-1 +`define DIVVAL3 50-1 +`endif + +`define FUSS_WARTEN 4 //Wartezeit +`define GELB_DAUER 4 //Wartezeit +`define FUSS_GRUEN_DAUER 4 //Wartezeit +`define ALLE_ROT_DAUER 4 //Wartezeit + +`define HAUPT_GRUEN_DAUER 4 //Wartezeit +`define NEBEN_GRUEN_DAUER 4 //Wartezeit + + +`define PHASEVAL 8 + +//clock divider to generate 1 Hz +// + +assign en_div_1 = 1'b1; +assign en_div_2 = tc_div_1; +assign en_div_3 = tc_div_1 & tc_div_2; + +always begin + CLOCK_ENABLE = tc_div_3; +end + +// synchronisze KEY to CLOCK_50 +always @(posedge CLOCK_50) begin + MELDER_Q = ~KEY[0]; + MELDER_QQ = MELDER_Q; +end + +// Melder sofort setzen +// Melder zuruecksetzen wenn die Anforderung von der Statemachine verarbeitet +// wurde. Die Ampelanlage gibt den FUSSGAENGERn nur dann gruen wenn +// ein Melder anstehst... +always @(posedge CLOCK_50 or negedge RESET) begin + if (RESET) + MELDER <= 1'b0; + else begin + case ({MELDER_QQ, MELDER_ACK}) + 2'b01: MELDER <= 1'b0; + 2'b10: MELDER <= 1'b1; + 2'b11: MELDER <= ~MELDER; + default: ; + endcase + end +end + +assign WARTEN_FERTIG = (WARTEZAEHLER == 4'b0000); + +//Wartezaehler +always @(posedge CLOCK_50 or RESET) begin + if(RST) begin + WARTEZAEHLER <= WARTEWERT; + end + else if(CLOCK_ENABLE) begin + if (START_WARTEN) + WARTEZAEHLER <= WARTEWERT; + START_WARTEN <= 1'b0; + if (~WARTEN_FERTIG) + WARTEZAEHLER <= WARTEZAEHLER - 1'b1; + end +end + +always @(posedge CLOCK_50 or negedge RESET) + if (RESET) + begin + HAUPTSTR <= AUTO_GRUEN; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b0; + STATE <= 4'd0; + MELDER_ACK <= 1'b0; + end + else + if (CLOCK_ENABLE) + case (STATE) + 4'd0: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_GRUEN; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= HAUPT_GRUEN_DAUER; + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd1: begin + if(WARTEN_FERTIG) begin + HAUPTSTR = AUTO_GELB; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= GELB_DAUER; + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd2: begin + if(WARTEN_FERTIG && MELDER) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= FUSS_WARTEN; + MELDER_ACK <= 1'b1; + + end else if (WARTEN_FERTIG && ~MELDER) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= ALLE_ROT_DAUER; + + end else if(~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + end + end + 4'd3: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_GRUEN; + START_WARTEN <= 1'b1; + WARTEWERT <= FUSS_GRUEN_DAUER; + MELDER_ACK <= 1'b0; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd4: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GELB|AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= GELB_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd5: begin + if(WARTEN_FERTIG) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GRUEN; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT = NEBEN_GRUEN_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd6: begin + if(WARTEN_FERTIG) begin + HAUPTSTR = AUTO_ROT; + NEBENSTR = AUTO_GELB; + FUSSGAENGER = FUSS_ROT; + START_WARTEN = 1'b1; + WARTEWERT = GELB_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd7: begin + if(WARTEN_FERTIG) begin + HAUPTSTR = AUTO_ROT; + NEBENSTR = AUTO_ROT; + FUSSGAENGER = FUSS_ROT; + START_WARTEN = 1'b1; + WARTEWERT = ALLE_ROT_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + 4'd8: begin + if(WARTEN_FERTIG) begin + HAUPTSTR = AUTO_GELB|AUTO_ROT; + NEBENSTR = AUTO_ROT; + FUSSGAENGER = FUSS_ROT; + START_WARTEN = 1'b1; + WARTEWERT = GELB_DAUER; + + end else begin + START_WARTEN <= 1'b0; + end + end + default: + STATE <= 4'd1; + endcase + +mod_n_counter_10bit #(.N(DIVVAL1)) clock_divider_1( + .CLK(CLOCK_50), + .RST(RESET), + .EN(en_div_1), + .Q(q_div_1), + .TC(tc_div_1) +); + +mod_n_counter_10bit #(.N(DIVVAL1)) clock_divider_2( + .CLK(CLOCK_50), + .RST(RESET), + .EN(en_div_2), + .Q(q_div_2), + .TC(tc_div_2) +); + +mod_n_counter_10bit #(.N(DIVVAL3)) clock_divider_3( + .CLK(CLOCK_50), + .RST(RESET), + .EN(en_div_3), + .Q(q_div_3), + .TC(tc_div_3) +); + +endmodule diff --git a/labor_3/Übungen/ampel/src/ampel_wo_src.v b/labor_3/Übungen/ampel/src/ampel_wo_src.v deleted file mode 100644 index 03994c7..0000000 --- a/labor_3/Übungen/ampel/src/ampel_wo_src.v +++ /dev/null @@ -1,159 +0,0 @@ -/****************************************************** -* -* Description: Vorlage Ampelsteurerung -* Date: 05.01.2018 -* File Name: ampel_wo_src.v -* Version: 1.2 -* Target: Simulation and Synthesis -* Technology: -* -* Rev Author Date Changes -* ----------------------------------------------------- -* 1.0 RHK 10.10.2011 Initial Release -* 1.1 JZ 10.03.2016 several bugfixes -* 1.2 JZ 05.01.2018 angepasst auf neues Ampelboard -* 1.3 MW 07.03.2019 STATE Konstanten angepasst -*******************************************************/ - -`timescale 1ns / 1ps - -module ampel ( - input CLOCK_50, - input [1:0] KEY, - output [2:0] LEDH_L, - output [2:0] LEDH_R, - output [2:0] LEDN_L, - output [2:0] LEDN_R, - output [1:0] LEDF_L, - output [1:0] LEDF_R, - output reg DBG -); - -reg [9:0] CLKDIV1; -reg [9:0] CLKDIV2; -reg [9:0] CLKDIV3; - -reg MELDER; -reg MELDER_Q; -reg MELDER_QQ; -reg MELDER_ACK; -reg CLOCK_ENABLE; - -reg START_WARTEN; -reg [3:0] STATE; -reg [2:0] HAUPTSTR; -reg [2:0] NEBENSTR; -reg [1:0] FUSSGAENGER; - -reg [3:0] WARTEZAEHLER; -reg [3:0] WARTEWERT; - -// R Gr -parameter FUSS_AUS = 2'b00; -parameter FUSS_ROT = 2'b10; -parameter FUSS_GRUEN = 2'b01; -// R Ge Gr -parameter AUTO_AUS = 3'b000; -parameter AUTO_ROT = 3'b100; -parameter AUTO_GELB = 3'b010; -parameter AUTO_GRUEN = 3'b001; - -assign RESETn = KEY[1]; - -assign LEDH_L = HAUPTSTR; -assign LEDH_R = HAUPTSTR; -assign LEDN_L = NEBENSTR; -assign LEDN_R = NEBENSTR; -assign LEDF_L = FUSSGAENGER; -assign LEDF_R = FUSSGAENGER; - -`ifdef SIMULATION -`define DIVVAL1 10-1 -`define DIVVAL3 5-1 -`else -`define DIVVAL1 1000-1 -`define DIVVAL3 50-1 -`endif - -`define FUSS_WARTEN 4 //Wartezeit -`define GELB_DAUER 4 //Wartezeit -`define FUSS_GRUEN_DAUER 4 //Wartezeit -`define ALLE_ROT_DAUER 4 //Wartezeit - -`define HAUPT_GRUEN_DAUER 4 //Wartezeit -`define NEBEN_GRUEN_DAUER 4 //Wartezeit - - -`define PHASEVAL 8 - -//clock divider to generate 1 Hz -// - -// HIER IHREN CODE EINFÜGEN - - -// synchronisze KEY to CLOCK_50 -always @(posedge CLOCK_50) begin -// HIER IHREN CODE EINFÜGEN -end - -// Melder sofort setzen -// Melder zuruecksetzen wenn die Anforderung von der Statemachine verarbeitet -// wurde. Die Ampelanlage gibt den FUSSGAENGERn nur dann gruen wenn -// ein Melder anstehst... -always @(posedge CLOCK_50 or negedge RESETn) begin - if (~RESETn) - MELDER <= 1'b0; - else begin -// HIER IHREN CODE EINFÜGEN - end -end - -//Wartezaehler -// HIER IHREN CODE EINFÜGEN - -assign WARTEN_FERTIG = // HIER IHREN CODE EINFÜGEN; - - -always @(posedge CLOCK_50 or negedge RESETn) - if (~RESETn) - begin - HAUPTSTR <= AUTO_GRUEN; - NEBENSTR <= AUTO_ROT; - FUSSGAENGER <= FUSS_ROT; - START_WARTEN <= 1'b0; - STATE <= 4'd0; - MELDER_ACK <= 1'b0; - end - else - if (CLOCK_ENABLE) - case (STATE) - 4'd0: begin - - end - 4'd1: begin - - end - 4'd2: begin - - end - 4'd3: begin - - end - 4'd4: begin - - end - 4'd5: begin - - end - 4'd6: begin - - end - 4'd7: begin - - end - default: - STATE <= 4'd1; - endcase - -endmodule diff --git a/labor_3/Übungen/ampel/src/jk_ff.v b/labor_3/Übungen/ampel/src/jk_ff.v new file mode 100644 index 0000000..ea8b0ad --- /dev/null +++ b/labor_3/Übungen/ampel/src/jk_ff.v @@ -0,0 +1,38 @@ +//Modellierung eines jk-ff +//Autor: M. Erdem +//Mat.-Nr.: 8757524 +//Datum: 21.02.2024 + +module jk_ff ( + //Ein- und Ausgänge anlegen + R, + CLK, + EN, + J, + K, + Q +); + input R, CLK, EN, J, K; + output reg Q; + + //Verhaltensbeschreibung + always @(R or posedge CLK) begin + + //Bei einem Reset soll Q auf 0 gesetzt werden + if(R) begin + Q <= 1'b0; + + //Wenn EN = 1 dann soll das Modul aktiv sein + end else if (EN) begin + + //Zustände von J und K werden analysiert und entsprechend Q angesteuert. + //Hierbei ist J Bit Nr. 1 und K ist Bit Nr. 0. (Von Rechts nach Links.) + case ({J, K}) + 2'b01: Q <= 1'b0; + 2'b10: Q <= 1'b1; + 2'b11: Q <= ~Q; + default: ; + endcase + end + end +endmodule \ No newline at end of file