From 59771a48137c3a323782ff3a1fc7a6f67bd24a3e Mon Sep 17 00:00:00 2001 From: musabe24 Date: Thu, 22 Feb 2024 23:07:11 +0100 Subject: [PATCH] =?UTF-8?q?Aufgabe=20Zuhause=20komplett=20von=20vorne=20an?= =?UTF-8?q?gefangen=20zu=20l=C3=B6sen=20und=20lauff=C3=A4hig=20gemacht.=20?= =?UTF-8?q?Es=20besteht=20noch=20das=20Problem,=20das=20die=20Fu=C3=9Fg?= =?UTF-8?q?=C3=A4ngerampel=20zu=20fr=C3=BCh=20auf=20gr=C3=BCn=20geht.=20Es?= =?UTF-8?q?=20muss=20erst=20ein=20zyklus=20vergehen,=20bevor=20das=20gesch?= =?UTF-8?q?ieht.=20->=20LATCH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 -> 73728 bytes labor_3/Übungen/ampel/sim/wave.do | 1 + 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 -> 4818 bytes .../Übungen/ampel/sim/work/ampel/_primary.dbs | Bin 0 -> 6570 bytes .../Übungen/ampel/sim/work/ampel/_primary.vhd | 32 ++ .../Übungen/ampel/sim/work/ampel/verilog.prw | Bin 0 -> 2168 bytes .../Übungen/ampel/sim/work/ampel/verilog.psm | Bin 0 -> 51000 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 | 335 ++++++++++++++++++ labor_3/Übungen/ampel/src/ampel_wo_src.v | 159 --------- 23 files changed, 780 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 delete mode 100644 labor_3/Übungen/ampel/src/ampel_wo_src.v diff --git a/labor_3/Übungen/ampel/sim/modelsim.ini b/labor_3/Übungen/ampel/sim/modelsim.ini new file mode 100644 index 0000000..b0f61a8 --- /dev/null +++ b/labor_3/Übungen/ampel/sim/modelsim.ini @@ -0,0 +1,324 @@ +; Copyright 1991-2009 Mentor Graphics Corporation +; +; All Rights Reserved. +; +; THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF +; MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS. +; + +[Library] +others = $MODEL_TECH/../modelsim.ini + +; Altera Primitive libraries +; +; VHDL Section +; +; +; Verilog Section +; + +work = work +[vcom] +; VHDL93 variable selects language version as the default. +; Default is VHDL-2002. +; Value of 0 or 1987 for VHDL-1987. +; Value of 1 or 1993 for VHDL-1993. +; Default or value of 2 or 2002 for VHDL-2002. +; Default or value of 3 or 2008 for VHDL-2008. +VHDL93 = 2002 + +; Show source line containing error. Default is off. +; Show_source = 1 + +; Turn off unbound-component warnings. Default is on. +; Show_Warning1 = 0 + +; Turn off process-without-a-wait-statement warnings. Default is on. +; Show_Warning2 = 0 + +; Turn off null-range warnings. Default is on. +; Show_Warning3 = 0 + +; Turn off no-space-in-time-literal warnings. Default is on. +; Show_Warning4 = 0 + +; Turn off multiple-drivers-on-unresolved-signal warnings. Default is on. +; Show_Warning5 = 0 + +; Turn off optimization for IEEE std_logic_1164 package. Default is on. +; Optimize_1164 = 0 + +; Turn on resolving of ambiguous function overloading in favor of the +; "explicit" function declaration (not the one automatically created by +; the compiler for each type declaration). Default is off. +; The .ini file has Explicit enabled so that std_logic_signed/unsigned +; will match the behavior of synthesis tools. +Explicit = 1 + +; Turn off acceleration of the VITAL packages. Default is to accelerate. +; NoVital = 1 + +; Turn off VITAL compliance checking. Default is checking on. +; NoVitalCheck = 1 + +; Ignore VITAL compliance checking errors. Default is to not ignore. +; IgnoreVitalErrors = 1 + +; Turn off VITAL compliance checking warnings. Default is to show warnings. +; Show_VitalChecksWarnings = 0 + +; Keep silent about case statement static warnings. +; Default is to give a warning. +; NoCaseStaticError = 1 + +; Keep silent about warnings caused by aggregates that are not locally static. +; Default is to give a warning. +; NoOthersStaticError = 1 + +; Turn off inclusion of debugging info within design units. +; Default is to include debugging info. +; NoDebug = 1 + +; Turn off "Loading..." messages. Default is messages on. +; Quiet = 1 + +; Turn on some limited synthesis rule compliance checking. Checks only: +; -- signals used (read) by a process must be in the sensitivity list +; CheckSynthesis = 1 + +; Activate optimizations on expressions that do not involve signals, +; waits, or function/procedure/task invocations. Default is off. +; ScalarOpts = 1 + +; Require the user to specify a configuration for all bindings, +; and do not generate a compile time default binding for the +; component. This will result in an elaboration error of +; 'component not bound' if the user fails to do so. Avoids the rare +; issue of a false dependency upon the unused default binding. +; RequireConfigForAllDefaultBinding = 1 + +; Inhibit range checking on subscripts of arrays. Range checking on +; scalars defined with subtypes is inhibited by default. +; NoIndexCheck = 1 + +; Inhibit range checks on all (implicit and explicit) assignments to +; scalar objects defined with subtypes. +; NoRangeCheck = 1 + +[vlog] + +; Turn off inclusion of debugging info within design units. +; Default is to include debugging info. +; NoDebug = 1 + +; Turn off "loading..." messages. Default is messages on. +; Quiet = 1 + +; Turn on Verilog hazard checking (order-dependent accessing of global vars). +; Default is off. +; Hazard = 1 + +; Turn on converting regular Verilog identifiers to uppercase. Allows case +; insensitivity for module names. Default is no conversion. +; UpCase = 1 + +; Turn on incremental compilation of modules. Default is off. +; Incremental = 1 + +; Turns on lint-style checking. +; Show_Lint = 1 + +[vsim] +; Simulator resolution +; Set to fs, ps, ns, us, ms, or sec with optional prefix of 1, 10, or 100. +Resolution = ps + +; User time unit for run commands +; Set to default, fs, ps, ns, us, ms, or sec. The default is to use the +; unit specified for Resolution. For example, if Resolution is 100ps, +; then UserTimeUnit defaults to ps. +; Should generally be set to default. +UserTimeUnit = default + +; Default run length +RunLength = 100 + +; Maximum iterations that can be run without advancing simulation time +IterationLimit = 5000 + +; Directive to license manager: +; vhdl Immediately reserve a VHDL license +; vlog Immediately reserve a Verilog license +; plus Immediately reserve a VHDL and Verilog license +; nomgc Do not look for Mentor Graphics Licenses +; nomti Do not look for Model Technology Licenses +; noqueue Do not wait in the license queue when a license isn't available +; viewsim Try for viewer license but accept simulator license(s) instead +; of queuing for viewer license +; License = plus + +; Stop the simulator after a VHDL/Verilog assertion message +; 0 = Note 1 = Warning 2 = Error 3 = Failure 4 = Fatal +BreakOnAssertion = 3 + +; Assertion Message Format +; %S - Severity Level +; %R - Report Message +; %T - Time of assertion +; %D - Delta +; %I - Instance or Region pathname (if available) +; %% - print '%' character +; AssertionFormat = "** %S: %R\n Time: %T Iteration: %D%I\n" + +; Assertion File - alternate file for storing VHDL/Verilog assertion messages +; AssertFile = assert.log + +; Default radix for all windows and commands... +; Set to symbolic, ascii, binary, octal, decimal, hex, unsigned +DefaultRadix = symbolic + +; VSIM Startup command +; Startup = do startup.do + +; File for saving command transcript +TranscriptFile = transcript + +; File for saving command history +; CommandHistory = cmdhist.log + +; Specify whether paths in simulator commands should be described +; in VHDL or Verilog format. +; For VHDL, PathSeparator = / +; For Verilog, PathSeparator = . +; Must not be the same character as DatasetSeparator. +PathSeparator = / + +; Specify the dataset separator for fully rooted contexts. +; The default is ':'. For example, sim:/top +; Must not be the same character as PathSeparator. +DatasetSeparator = : + +; Disable VHDL assertion messages +; IgnoreNote = 1 +; IgnoreWarning = 1 +; IgnoreError = 1 +; IgnoreFailure = 1 + +; Default force kind. May be freeze, drive, deposit, or default +; or in other terms, fixed, wired, or charged. +; A value of "default" will use the signal kind to determine the +; force kind, drive for resolved signals, freeze for unresolved signals +; DefaultForceKind = freeze + +; If zero, open files when elaborated; otherwise, open files on +; first read or write. Default is 0. +; DelayFileOpen = 1 + +; Control VHDL files opened for write. +; 0 = Buffered, 1 = Unbuffered +UnbufferedOutput = 0 + +; Control the number of VHDL files open concurrently. +; This number should always be less than the current ulimit +; setting for max file descriptors. +; 0 = unlimited +ConcurrentFileLimit = 40 + +; Control the number of hierarchical regions displayed as +; part of a signal name shown in the Wave window. +; A value of zero tells VSIM to display the full name. +; The default is 0. +; WaveSignalNameWidth = 0 + +; Turn off warnings from the std_logic_arith, std_logic_unsigned +; and std_logic_signed packages. +; StdArithNoWarnings = 1 + +; Turn off warnings from the IEEE numeric_std and numeric_bit packages. +; NumericStdNoWarnings = 1 + +; Control the format of the (VHDL) FOR generate statement label +; for each iteration. Do not quote it. +; The format string here must contain the conversion codes %s and %d, +; in that order, and no other conversion codes. The %s represents +; the generate_label; the %d represents the generate parameter value +; at a particular generate iteration (this is the position number if +; the generate parameter is of an enumeration type). Embedded whitespace +; is allowed (but discouraged); leading and trailing whitespace is ignored. +; Application of the format must result in a unique scope name over all +; such names in the design so that name lookup can function properly. +; GenerateFormat = %s__%d + +; Specify whether checkpoint files should be compressed. +; The default is 1 (compressed). +; CheckpointCompressMode = 0 + +; List of dynamically loaded objects for Verilog PLI applications +; Veriuser = veriuser.sl + +; Specify default options for the restart command. Options can be one +; or more of: -force -nobreakpoint -nolist -nolog -nowave +; DefaultRestartOptions = -force + +; HP-UX 10.20 ONLY - Enable memory locking to speed up large designs +; (> 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..6d99a51b2e374e11e14ce3b1335d26c0ec5e1ae0 GIT binary patch literal 73728 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 +IlLNUY`h`GTJ1?TjLj1BUS2 +VOCKRzhG[H7hm^_`n>48^e3 +R3 +Z13 w1708631937 +8../src/mod_n_counter_10bit.v +F../src/mod_n_counter_10bit.v +L0 1 +R7 +r1 +!s85 0 +31 +!s108 1708639474.750000 +!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 1708639474.609000 +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..985cf7c38c4d5ed37d0f4b46517e409fca0dab27 GIT binary patch literal 4818 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 arv+Nrf8PVwXYjxCf&bnI%7CA#H~%lU4Z8FI literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.dat b/labor_3/Übungen/ampel/sim/work/mod_n_counter_10bit/_primary.dat new file mode 100644 index 0000000000000000000000000000000000000000..2bfdebbdd89800aad9eac83268752ddb1b9f0851 GIT binary patch literal 506 zcmZQ9IK}t<_an2PUxCDvn)o|UFa55aeeZquk4+39@H?LIUCYBh28P)Je~p>`MBHBb z+xz}Be|zSoz8tf-fC|ja#go`Bl&o-dXJT0CIk}OA#~>$X=Go7ktY;M7_|EM6%+Gd4 z=S|?rd#nr{yY`eHf0K5D6R7Ry=ACIE^A*l5?PX8U*b-y0rpb$gX_c;nR6`}lTz3YB zM9xx1&Wnc6iCg{)ft1j&oKrvg|hak}Q9fRdA-8@!HIk zV~hIj_*jGW55+It;E}>U=a=$#kQ061fXIobxCEBvI((nHRZ}5QYoT5+Tk+H;ZPkd9 zrA?l7P3&LHe$;c`KXYrwR6C6d_LxJ9+rV1+!CHB^1hjG^zAxSC$v9D2*Cn34rALID zomI8S8zlXH3W&UF%{{}Vw)MLFO@sL*sjnAaNnUoulf7l3NFclD#B{yKo*U=*>%0u^ z{m061e&6nV4&OIlZ%kOgu2Jmpg>(IFx$T8%{L9%GE?xbyLW}W7m*%edr~WTf3z=6P z>ilHw!=JaJ_OJT8^2EWoEl)XC>|QGK@zNEBB^r@QVN1I!_Dj8XvuR71G4r5Zk~qiS tIgblMqH>Ga8Xol@RFjK{6EQg2^!~i;T!ona?=R+Uk6<#`>LaI|2mlNu)`S26 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..46dc89713802a35a6cbfb783bd97e0aecf682738 GIT binary patch literal 651 zcmZQ9IK}t<*CVsWPe9`D-PhfZ~Cx<3{+`+T(I(w$adCAze}^j?L@i1<@#I^ z$qh{hIns|u^;?jbl)$CSo?)9_w@-|UJiq_*0-*xMi3}TAKu!P$F(?Q?fR|6c@zS?d zvwWvb^!~kR@3}oMMYABD1v!pI1FQ(52jUk2Cll<57D6 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;FzBQ%_1+3%4Pdq zo_Dh_{F|Vzyv&^msJ*ghrzDVKP%v0p$XR}2@tR{k;j`V$K~g(&EpLIPwlA&cDnGM$ z$}yYpYPatoOLx9SNO2>iz`Bs6cyLScBBam_D)iFJ@fA3^s)oY>I?{29qp@g(!!&)C3%cso}tB4%jZR zIT&id=7?8E{#_=@&amOLV9HU!XFIplyS@H%Ti`43tdtfer(}btA9A>>&Y8W7`peb zIn%kgs`-%I?v{J2PCfRSHDmRueY;%sR&L$HWj=Yj?8N^Iw7&QJdi(k6yej|T$ct0l zRYREMR?kssJ#=up{L+l|tNM?L-krJNR8VmCf&(HQ(>0B~mhdcmd7)fk$`t;)k1WHY duIBU|E-Db;u-I=~4QJ!^G?N4Se#j{&0syqinB4#X literal 0 HcmV?d00001 diff --git a/labor_3/Übungen/ampel/sim/work/tb_ampel/_primary.dbs b/labor_3/Übungen/ampel/sim/work/tb_ampel/_primary.dbs new file mode 100644 index 0000000000000000000000000000000000000000..69401eb0a838c06cf6478aebd5f3f138726852cb GIT binary patch literal 1173 zcmZQ9IK}t<*CVsWPe9_>z1Q83!LrGO4K2NEF5_;`4M$d|MbkJ}3k7#Qs=;cpU%bGS0BF3Vc}# z;<5d#%Q(%H;T&X@>gdIBz$)q9EtX3~LR^>M-@IUGSaJW}?WaXirFD1SZ*~Y~$+|K7 zmFIKQk`1(C7Kp2t%z7hBdj=?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..96e2703 --- /dev/null +++ b/labor_3/Übungen/ampel/src/ampel.v @@ -0,0 +1,335 @@ +/****************************************************** +* +* 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 [9:0] q_div_1; +wire [9:0] q_div_2; +wire [9:0] q_div_3; + +wire tc_div_1; +wire tc_div_2; +wire tc_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 +//Clock Enable Generation +assign en_div_1 = 1'b1; +assign en_div_2 = tc_div_1; +assign en_div_3 = tc_div_1 & tc_div_2; + +always @(en_div_3) begin + CLOCK_ENABLE <= en_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 posedge RESET) begin + if (RESET) + MELDER <= 1'b0; + else begin + case ({MELDER_QQ,MELDER_ACK}) + 2'b00: ; + 2'b01: MELDER <= 1'b0; + 2'b10: MELDER <= 1'b1; + 2'b11: MELDER <= ~MELDER; + endcase + end +end + +//Wartezaehler + +assign WARTEN_FERTIG = (WARTEZAEHLER == 1'b0); + +always @(posedge CLOCK_50 or posedge RESET) begin + if (RESET) begin + WARTEZAEHLER <= WARTEWERT; + end + else if (CLOCK_ENABLE) begin + if (~WARTEN_FERTIG) begin + WARTEZAEHLER <= WARTEZAEHLER - 1'b1; + end + else if (START_WARTEN) begin + START_WARTEN <= ~START_WARTEN; + WARTEZAEHLER <= WARTEWERT; + end + end +end + + +always @(posedge CLOCK_50 or posedge 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 + START_WARTEN <= 1'b0; + STATE <= 4'd0; + end + else begin + HAUPTSTR <= AUTO_GRUEN; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `HAUPT_GRUEN_DAUER; + STATE <= 4'd1; + end + end + + 4'd1: begin + if(~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd1; + end + else begin + HAUPTSTR <= AUTO_GELB; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + STATE <= 4'd2; + end + + end + 4'd2: begin + if (~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd2; + end + else 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; + STATE <= 4'd3; + end + else if (WARTEN_FERTIG && ~MELDER) begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `ALLE_ROT_DAUER; + STATE <= 4'd4; + end + + end + 4'd3: begin + if (~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd3; + end + else begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_GRUEN; + START_WARTEN <= 1'b1; + WARTEWERT <= `FUSS_GRUEN_DAUER; + MELDER_ACK <= 1'b0; + STATE <= 4'd2; + end + end + 4'd4: begin + if (~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd4; + end + else begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GELB | AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + STATE <= 4'd5; + end + end + 4'd5: begin + if (~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd5; + end + else begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GRUEN; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `NEBEN_GRUEN_DAUER; + STATE <= 4'd6; + end + end + 4'd6: begin + if (~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd6; + end + else begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_GELB; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + STATE <= 4'd7; + end + end + 4'd7: begin + if (~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd7; + end + else begin + HAUPTSTR <= AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `ALLE_ROT_DAUER; + STATE <= 4'd8; + end + end + 4'd8: begin + if (~WARTEN_FERTIG) begin + START_WARTEN <= 1'b0; + STATE <= 4'd8; + end + else begin + HAUPTSTR <= AUTO_GELB | AUTO_ROT; + NEBENSTR <= AUTO_ROT; + FUSSGAENGER <= FUSS_ROT; + START_WARTEN <= 1'b1; + WARTEWERT <= `GELB_DAUER; + STATE <= 4'd0; + end + end + default: + STATE <= 4'd1; + endcase + +mod_n_counter_10bit #(.N(`DIVVAL1)) 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)) 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)) 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