Added playback controller and testbench
All checks were successful
ci/woodpecker/push/test-workflow Pipeline was successful

This commit is contained in:
dilanthi 2025-05-22 20:06:31 -07:00
parent 18aab51325
commit 3f626074f9
4 changed files with 515 additions and 318 deletions

654
SDVD.xpr
View File

@ -1,314 +1,340 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Product Version: Vivado v2024.2 (64-bit) --> <!-- Product Version: Vivado v2024.2 (64-bit) -->
<!-- --> <!-- -->
<!-- Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. --> <!-- Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -->
<!-- Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. --> <!-- Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. -->
<Project Product="Vivado" Version="7" Minor="68" Path="/home/uelen/Sync/ece571/SDVD/SDVD.xpr"> <Project Product="Vivado" Version="7" Minor="68" Path="C:/Users/midni/OneDrive/Desktop/SDVD/SDVD.xpr">
<DefaultLaunch Dir="$PRUNDIR"/> <DefaultLaunch Dir="$PRUNDIR"/>
<Configuration> <Configuration>
<Option Name="Id" Val="ef9705cecf4b4a4599c24f6838c9c6ea"/> <Option Name="Id" Val="ef9705cecf4b4a4599c24f6838c9c6ea"/>
<Option Name="Part" Val="xc7a100tcsg324-1"/> <Option Name="Part" Val="xc7a100tcsg324-1"/>
<Option Name="CompiledLibDir" Val="$PCACHEDIR/compile_simlib"/> <Option Name="CompiledLibDir" Val="$PCACHEDIR/compile_simlib"/>
<Option Name="CompiledLibDirXSim" Val=""/> <Option Name="CompiledLibDirXSim" Val=""/>
<Option Name="CompiledLibDirModelSim" Val="$PCACHEDIR/compile_simlib/modelsim"/> <Option Name="CompiledLibDirModelSim" Val="$PCACHEDIR/compile_simlib/modelsim"/>
<Option Name="CompiledLibDirQuesta" Val="$PCACHEDIR/compile_simlib/questa"/> <Option Name="CompiledLibDirQuesta" Val="$PCACHEDIR/compile_simlib/questa"/>
<Option Name="CompiledLibDirXcelium" Val="$PCACHEDIR/compile_simlib/xcelium"/> <Option Name="CompiledLibDirXcelium" Val="$PCACHEDIR/compile_simlib/xcelium"/>
<Option Name="CompiledLibDirVCS" Val="$PCACHEDIR/compile_simlib/vcs"/> <Option Name="CompiledLibDirVCS" Val="$PCACHEDIR/compile_simlib/vcs"/>
<Option Name="CompiledLibDirRiviera" Val="$PCACHEDIR/compile_simlib/riviera"/> <Option Name="CompiledLibDirRiviera" Val="$PCACHEDIR/compile_simlib/riviera"/>
<Option Name="CompiledLibDirActivehdl" Val="$PCACHEDIR/compile_simlib/activehdl"/> <Option Name="CompiledLibDirActivehdl" Val="$PCACHEDIR/compile_simlib/activehdl"/>
<Option Name="SimulatorInstallDirModelSim" Val=""/> <Option Name="SimulatorInstallDirModelSim" Val=""/>
<Option Name="SimulatorInstallDirQuesta" Val=""/> <Option Name="SimulatorInstallDirQuesta" Val=""/>
<Option Name="SimulatorInstallDirXcelium" Val=""/> <Option Name="SimulatorInstallDirXcelium" Val=""/>
<Option Name="SimulatorInstallDirVCS" Val=""/> <Option Name="SimulatorInstallDirVCS" Val=""/>
<Option Name="SimulatorInstallDirRiviera" Val=""/> <Option Name="SimulatorInstallDirRiviera" Val=""/>
<Option Name="SimulatorInstallDirActiveHdl" Val=""/> <Option Name="SimulatorInstallDirActiveHdl" Val=""/>
<Option Name="SimulatorGccInstallDirModelSim" Val=""/> <Option Name="SimulatorGccInstallDirModelSim" Val=""/>
<Option Name="SimulatorGccInstallDirQuesta" Val=""/> <Option Name="SimulatorGccInstallDirQuesta" Val=""/>
<Option Name="SimulatorGccInstallDirXcelium" Val=""/> <Option Name="SimulatorGccInstallDirXcelium" Val=""/>
<Option Name="SimulatorGccInstallDirVCS" Val=""/> <Option Name="SimulatorGccInstallDirVCS" Val=""/>
<Option Name="SimulatorGccInstallDirRiviera" Val=""/> <Option Name="SimulatorGccInstallDirRiviera" Val=""/>
<Option Name="SimulatorGccInstallDirActiveHdl" Val=""/> <Option Name="SimulatorGccInstallDirActiveHdl" Val=""/>
<Option Name="SimulatorVersionXsim" Val="2024.2"/> <Option Name="SimulatorVersionXsim" Val="2024.2"/>
<Option Name="SimulatorVersionModelSim" Val="2024.1"/> <Option Name="SimulatorVersionModelSim" Val="2024.1"/>
<Option Name="SimulatorVersionQuesta" Val="2024.1"/> <Option Name="SimulatorVersionQuesta" Val="2024.1"/>
<Option Name="SimulatorVersionXcelium" Val="24.03.003"/> <Option Name="SimulatorVersionXcelium" Val="24.03.003"/>
<Option Name="SimulatorVersionVCS" Val="V-2023.12-SP1"/> <Option Name="SimulatorVersionVCS" Val="V-2023.12-SP1"/>
<Option Name="SimulatorVersionRiviera" Val="2024.04"/> <Option Name="SimulatorVersionRiviera" Val="2024.04"/>
<Option Name="SimulatorVersionActiveHdl" Val="15.0"/> <Option Name="SimulatorVersionActiveHdl" Val="15.0"/>
<Option Name="SimulatorGccVersionXsim" Val="9.3.0"/> <Option Name="SimulatorGccVersionXsim" Val="9.3.0"/>
<Option Name="SimulatorGccVersionModelSim" Val="7.4.0"/> <Option Name="SimulatorGccVersionModelSim" Val="7.4.0"/>
<Option Name="SimulatorGccVersionQuesta" Val="7.4.0"/> <Option Name="SimulatorGccVersionQuesta" Val="7.4.0"/>
<Option Name="SimulatorGccVersionXcelium" Val="9.3.0"/> <Option Name="SimulatorGccVersionXcelium" Val="9.3.0"/>
<Option Name="SimulatorGccVersionVCS" Val="9.2.0"/> <Option Name="SimulatorGccVersionVCS" Val="9.2.0"/>
<Option Name="SimulatorGccVersionRiviera" Val="9.3.0"/> <Option Name="SimulatorGccVersionRiviera" Val="9.3.0"/>
<Option Name="SimulatorGccVersionActiveHdl" Val="9.3.0"/> <Option Name="SimulatorGccVersionActiveHdl" Val="9.3.0"/>
<Option Name="BoardPart" Val="digilentinc.com:nexys-a7-100t:part0:1.2"/> <Option Name="BoardPart" Val=""/>
<Option Name="BoardPartRepoPaths" Val="$PPRDIR/../../../.Xilinx/Vivado/2024.2/xhub/board_store/xilinx_board_store"/> <Option Name="ActiveSimSet" Val="playback_controller_tb"/>
<Option Name="ActiveSimSet" Val="sim_1"/> <Option Name="DefaultLib" Val="xil_defaultlib"/>
<Option Name="DefaultLib" Val="xil_defaultlib"/> <Option Name="ProjectType" Val="Default"/>
<Option Name="ProjectType" Val="Default"/> <Option Name="IPRepoPath" Val="$PPRDIR/../../../fpga/vivado-library"/>
<Option Name="IPRepoPath" Val="$PPRDIR/../../../fpga/vivado-library"/> <Option Name="IPOutputRepo" Val="$PCACHEDIR/ip"/>
<Option Name="IPOutputRepo" Val="$PCACHEDIR/ip"/> <Option Name="IPDefaultOutputPath" Val="$PGENDIR/sources_1"/>
<Option Name="IPDefaultOutputPath" Val="$PGENDIR/sources_1"/> <Option Name="IPCachePermission" Val="read"/>
<Option Name="IPCachePermission" Val="read"/> <Option Name="IPCachePermission" Val="write"/>
<Option Name="IPCachePermission" Val="write"/> <Option Name="EnableCoreContainer" Val="FALSE"/>
<Option Name="EnableCoreContainer" Val="FALSE"/> <Option Name="EnableResourceEstimation" Val="FALSE"/>
<Option Name="EnableResourceEstimation" Val="FALSE"/> <Option Name="SimCompileState" Val="TRUE"/>
<Option Name="SimCompileState" Val="TRUE"/> <Option Name="CreateRefXciForCoreContainers" Val="FALSE"/>
<Option Name="CreateRefXciForCoreContainers" Val="FALSE"/> <Option Name="IPUserFilesDir" Val="$PIPUSERFILESDIR"/>
<Option Name="IPUserFilesDir" Val="$PIPUSERFILESDIR"/> <Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/>
<Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/> <Option Name="EnableBDX" Val="FALSE"/>
<Option Name="EnableBDX" Val="FALSE"/> <Option Name="DSABoardId" Val="nexys-a7-100t"/>
<Option Name="DSABoardId" Val="nexys-a7-100t"/> <Option Name="WTXSimLaunchSim" Val="22"/>
<Option Name="WTXSimLaunchSim" Val="16"/> <Option Name="WTModelSimLaunchSim" Val="0"/>
<Option Name="WTModelSimLaunchSim" Val="0"/> <Option Name="WTQuestaLaunchSim" Val="0"/>
<Option Name="WTQuestaLaunchSim" Val="0"/> <Option Name="WTIesLaunchSim" Val="0"/>
<Option Name="WTIesLaunchSim" Val="0"/> <Option Name="WTVcsLaunchSim" Val="0"/>
<Option Name="WTVcsLaunchSim" Val="0"/> <Option Name="WTRivieraLaunchSim" Val="0"/>
<Option Name="WTRivieraLaunchSim" Val="0"/> <Option Name="WTActivehdlLaunchSim" Val="0"/>
<Option Name="WTActivehdlLaunchSim" Val="0"/> <Option Name="WTXSimExportSim" Val="0"/>
<Option Name="WTXSimExportSim" Val="0"/> <Option Name="WTModelSimExportSim" Val="0"/>
<Option Name="WTModelSimExportSim" Val="0"/> <Option Name="WTQuestaExportSim" Val="0"/>
<Option Name="WTQuestaExportSim" Val="0"/> <Option Name="WTIesExportSim" Val="0"/>
<Option Name="WTIesExportSim" Val="0"/> <Option Name="WTVcsExportSim" Val="0"/>
<Option Name="WTVcsExportSim" Val="0"/> <Option Name="WTRivieraExportSim" Val="0"/>
<Option Name="WTRivieraExportSim" Val="0"/> <Option Name="WTActivehdlExportSim" Val="0"/>
<Option Name="WTActivehdlExportSim" Val="0"/> <Option Name="GenerateIPUpgradeLog" Val="TRUE"/>
<Option Name="GenerateIPUpgradeLog" Val="TRUE"/> <Option Name="XSimRadix" Val="hex"/>
<Option Name="XSimRadix" Val="hex"/> <Option Name="XSimTimeUnit" Val="ns"/>
<Option Name="XSimTimeUnit" Val="ns"/> <Option Name="XSimArrayDisplayLimit" Val="1024"/>
<Option Name="XSimArrayDisplayLimit" Val="1024"/> <Option Name="XSimTraceLimit" Val="65536"/>
<Option Name="XSimTraceLimit" Val="65536"/> <Option Name="SimTypes" Val="rtl"/>
<Option Name="SimTypes" Val="rtl"/> <Option Name="SimTypes" Val="bfm"/>
<Option Name="SimTypes" Val="bfm"/> <Option Name="SimTypes" Val="tlm"/>
<Option Name="SimTypes" Val="tlm"/> <Option Name="SimTypes" Val="tlm_dpi"/>
<Option Name="SimTypes" Val="tlm_dpi"/> <Option Name="MEMEnableMemoryMapGeneration" Val="TRUE"/>
<Option Name="MEMEnableMemoryMapGeneration" Val="TRUE"/> <Option Name="DcpsUptoDate" Val="TRUE"/>
<Option Name="DcpsUptoDate" Val="TRUE"/> <Option Name="UseInlineHdlIP" Val="TRUE"/>
<Option Name="UseInlineHdlIP" Val="TRUE"/> <Option Name="LocalIPRepoLeafDirName" Val="ip_repo"/>
<Option Name="LocalIPRepoLeafDirName" Val="ip_repo"/> </Configuration>
</Configuration> <FileSets Version="1" Minor="32">
<FileSets Version="1" Minor="32"> <FileSet Name="sources_1" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1" RelGenDir="$PGENDIR/sources_1">
<FileSet Name="sources_1" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1" RelGenDir="$PGENDIR/sources_1"> <Filter Type="Srcs"/>
<Filter Type="Srcs"/> <File Path="$PPRDIR/design/debouncer.sv">
<File Path="$PPRDIR/design/debouncer.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <File Path="$PPRDIR/design/segment_display/display_anode_driver.sv">
<File Path="$PPRDIR/design/segment_display/display_anode_driver.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <File Path="$PPRDIR/design/segment_display/display_converter.sv">
<File Path="$PPRDIR/design/segment_display/display_converter.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <File Path="$PPRDIR/design/sdvd_defs.sv">
<File Path="$PPRDIR/design/sdvd_defs.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <File Path="$PPRDIR/design/low_freq_clock_gen.sv">
<File Path="$PPRDIR/design/low_freq_clock_gen.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <File Path="$PPRDIR/design/playback_controller.sv">
<File Path="$PPRDIR/design/playback_controller.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <File Path="$PPRDIR/design/segment_display/seconds_display.sv">
<File Path="$PPRDIR/design/segment_display/seconds_display.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <File Path="$PPRDIR/design/nexys_a7_top.sv">
<File Path="$PPRDIR/design/nexys_a7_top.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <Config>
<Config> <Option Name="DesignMode" Val="RTL"/>
<Option Name="DesignMode" Val="RTL"/> <Option Name="TopModule" Val="nexys_a7_top"/>
<Option Name="TopModule" Val="nexys_a7_top"/> <Option Name="TopAutoSet" Val="TRUE"/>
<Option Name="TopAutoSet" Val="TRUE"/> </Config>
</Config> </FileSet>
</FileSet> <FileSet Name="constrs_1" Type="Constrs" RelSrcDir="$PSRCDIR/constrs_1" RelGenDir="$PGENDIR/constrs_1">
<FileSet Name="constrs_1" Type="Constrs" RelSrcDir="$PSRCDIR/constrs_1" RelGenDir="$PGENDIR/constrs_1"> <Filter Type="Constrs"/>
<Filter Type="Constrs"/> <File Path="$PPRDIR/Nexys-A7-100T-Master.xdc">
<File Path="$PPRDIR/Nexys-A7-100T-Master.xdc"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> </FileInfo>
</FileInfo> </File>
</File> <Config>
<Config> <Option Name="ConstrsType" Val="XDC"/>
<Option Name="ConstrsType" Val="XDC"/> </Config>
</Config> </FileSet>
</FileSet> <FileSet Name="sim_1" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/sim_1" RelGenDir="$PGENDIR/sim_1">
<FileSet Name="sim_1" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/sim_1" RelGenDir="$PGENDIR/sim_1"> <Filter Type="Srcs"/>
<Filter Type="Srcs"/> <File Path="$PPRDIR/verification/debouncer_tb.sv">
<File Path="$PPRDIR/verification/debouncer_tb.sv"> <FileInfo>
<FileInfo> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/>
<Attr Name="UsedIn" Val="simulation"/> </FileInfo>
</FileInfo> </File>
</File> <Config>
<Config> <Option Name="DesignMode" Val="RTL"/>
<Option Name="DesignMode" Val="RTL"/> <Option Name="TopModule" Val="debouncer_tb"/>
<Option Name="TopModule" Val="debouncer_tb"/> <Option Name="TopLib" Val="xil_defaultlib"/>
<Option Name="TopLib" Val="xil_defaultlib"/> <Option Name="TransportPathDelay" Val="0"/>
<Option Name="TransportPathDelay" Val="0"/> <Option Name="TransportIntDelay" Val="0"/>
<Option Name="TransportIntDelay" Val="0"/> <Option Name="SelectedSimModel" Val="rtl"/>
<Option Name="SelectedSimModel" Val="rtl"/> <Option Name="PamDesignTestbench" Val=""/>
<Option Name="PamDesignTestbench" Val=""/> <Option Name="PamDutBypassFile" Val="xil_dut_bypass"/>
<Option Name="PamDutBypassFile" Val="xil_dut_bypass"/> <Option Name="PamSignalDriverFile" Val="xil_bypass_driver"/>
<Option Name="PamSignalDriverFile" Val="xil_bypass_driver"/> <Option Name="PamPseudoTop" Val="pseudo_tb"/>
<Option Name="PamPseudoTop" Val="pseudo_tb"/> <Option Name="SrcSet" Val="sources_1"/>
<Option Name="SrcSet" Val="sources_1"/> <Option Name="CosimPdi" Val=""/>
<Option Name="CosimPdi" Val=""/> <Option Name="CosimPlatform" Val=""/>
<Option Name="CosimPlatform" Val=""/> <Option Name="CosimElf" Val=""/>
<Option Name="CosimElf" Val=""/> </Config>
</Config> </FileSet>
</FileSet> <FileSet Name="utils_1" Type="Utils" RelSrcDir="$PSRCDIR/utils_1" RelGenDir="$PGENDIR/utils_1">
<FileSet Name="utils_1" Type="Utils" RelSrcDir="$PSRCDIR/utils_1" RelGenDir="$PGENDIR/utils_1"> <Filter Type="Utils"/>
<Filter Type="Utils"/> <Config>
<Config> <Option Name="TopAutoSet" Val="TRUE"/>
<Option Name="TopAutoSet" Val="TRUE"/> </Config>
</Config> </FileSet>
</FileSet> <FileSet Name="seconds_display_tb" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/seconds_display_tb" RelGenDir="$PGENDIR/seconds_display_tb">
<FileSet Name="seconds_display_tb" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/seconds_display_tb" RelGenDir="$PGENDIR/seconds_display_tb"> <Filter Type="Srcs"/>
<File Path="$PPRDIR/verification/segment_display/seconds_display_tb.sv"> <File Path="$PPRDIR/verification/segment_display/seconds_display_tb.sv">
<FileInfo> <FileInfo>
<Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="simulation"/> <Attr Name="UsedIn" Val="simulation"/>
</FileInfo> </FileInfo>
</File> </File>
<Config> <Config>
<Option Name="DesignMode" Val="RTL"/> <Option Name="DesignMode" Val="RTL"/>
<Option Name="TopModule" Val="seconds_display_tb"/> <Option Name="TopModule" Val="seconds_display_tb"/>
<Option Name="TopLib" Val="xil_defaultlib"/> <Option Name="TopLib" Val="xil_defaultlib"/>
<Option Name="TransportPathDelay" Val="0"/> <Option Name="TransportPathDelay" Val="0"/>
<Option Name="TransportIntDelay" Val="0"/> <Option Name="TransportIntDelay" Val="0"/>
<Option Name="SelectedSimModel" Val="rtl"/> <Option Name="SelectedSimModel" Val="rtl"/>
<Option Name="PamDesignTestbench" Val=""/> <Option Name="PamDesignTestbench" Val=""/>
<Option Name="PamDutBypassFile" Val="xil_dut_bypass"/> <Option Name="PamDutBypassFile" Val="xil_dut_bypass"/>
<Option Name="PamSignalDriverFile" Val="xil_bypass_driver"/> <Option Name="PamSignalDriverFile" Val="xil_bypass_driver"/>
<Option Name="PamPseudoTop" Val="pseudo_tb"/> <Option Name="PamPseudoTop" Val="pseudo_tb"/>
<Option Name="SrcSet" Val="sources_1"/> <Option Name="SrcSet" Val="sources_1"/>
<Option Name="CosimPdi" Val=""/> <Option Name="CosimPdi" Val=""/>
<Option Name="CosimPlatform" Val=""/> <Option Name="CosimPlatform" Val=""/>
<Option Name="CosimElf" Val=""/> <Option Name="CosimElf" Val=""/>
</Config> </Config>
</FileSet> </FileSet>
</FileSets> <FileSet Name="playback_controller_tb" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/playback_controller_tb" RelGenDir="$PGENDIR/playback_controller_tb">
<Simulators> <File Path="$PPRDIR/design/sdvd_defs.sv">
<Simulator Name="XSim"> <FileInfo>
<Option Name="Description" Val="Vivado Simulator"/> <Attr Name="UsedIn" Val="synthesis"/>
<Option Name="CompiledLib" Val="0"/> <Attr Name="UsedIn" Val="implementation"/>
</Simulator> <Attr Name="UsedIn" Val="simulation"/>
<Simulator Name="ModelSim"> </FileInfo>
<Option Name="Description" Val="ModelSim Simulator"/> </File>
</Simulator> <File Path="$PPRDIR/verification/playback_controller_tb.sv">
<Simulator Name="Questa"> <FileInfo>
<Option Name="Description" Val="Questa Advanced Simulator"/> <Attr Name="UsedIn" Val="synthesis"/>
</Simulator> <Attr Name="UsedIn" Val="implementation"/>
<Simulator Name="Xcelium"> <Attr Name="UsedIn" Val="simulation"/>
<Option Name="Description" Val="Xcelium Parallel Simulator"/> </FileInfo>
</Simulator> </File>
<Simulator Name="VCS"> <Config>
<Option Name="Description" Val="Verilog Compiler Simulator (VCS)"/> <Option Name="DesignMode" Val="RTL"/>
</Simulator> <Option Name="TopModule" Val="playback_controller_tb"/>
<Simulator Name="Riviera"> <Option Name="TopLib" Val="xil_defaultlib"/>
<Option Name="Description" Val="Riviera-PRO Simulator"/> <Option Name="VerilogDir" Val="$PPRDIR/design"/>
</Simulator> <Option Name="TransportPathDelay" Val="0"/>
</Simulators> <Option Name="TransportIntDelay" Val="0"/>
<Runs Version="1" Minor="22"> <Option Name="SelectedSimModel" Val="rtl"/>
<Run Id="synth_1" Type="Ft3:Synth" SrcSet="sources_1" Part="xc7a100tcsg324-1" ConstrsSet="constrs_1" Description="Vivado Synthesis Defaults" AutoIncrementalCheckpoint="true" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/synth_1" IncludeInArchive="true" IsChild="false" AutoIncrementalDir="$PSRCDIR/utils_1/imports/synth_1" AutoRQSDir="$PSRCDIR/utils_1/imports/synth_1" ParallelReportGen="true"> <Option Name="PamDesignTestbench" Val=""/>
<Strategy Version="1" Minor="2"> <Option Name="PamDutBypassFile" Val="xil_dut_bypass"/>
<StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2024"> <Option Name="PamSignalDriverFile" Val="xil_bypass_driver"/>
<Desc>Vivado Synthesis Defaults</Desc> <Option Name="PamPseudoTop" Val="pseudo_tb"/>
</StratHandle> <Option Name="SrcSet" Val="sources_1"/>
<Step Id="synth_design"/> <Option Name="CosimPdi" Val=""/>
</Strategy> <Option Name="CosimPlatform" Val=""/>
<GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/> <Option Name="CosimElf" Val=""/>
<ReportStrategy Name="Vivado Synthesis Default Reports" Flow="Vivado Synthesis 2024"/> </Config>
<Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> </FileSet>
<RQSFiles/> </FileSets>
</Run> <Simulators>
<Run Id="impl_1" Type="Ft2:EntireDesign" Part="xc7a100tcsg324-1" ConstrsSet="constrs_1" Description="Default settings for Implementation." AutoIncrementalCheckpoint="false" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/impl_1" SynthRun="synth_1" IncludeInArchive="true" IsChild="false" GenFullBitstream="true" AutoIncrementalDir="$PSRCDIR/utils_1/imports/impl_1" LaunchOptions="-jobs 2 " AutoRQSDir="$PSRCDIR/utils_1/imports/impl_1" ParallelReportGen="true"> <Simulator Name="XSim">
<Strategy Version="1" Minor="2"> <Option Name="Description" Val="Vivado Simulator"/>
<StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2024"> <Option Name="CompiledLib" Val="0"/>
<Desc>Default settings for Implementation.</Desc> </Simulator>
</StratHandle> <Simulator Name="ModelSim">
<Step Id="init_design"/> <Option Name="Description" Val="ModelSim Simulator"/>
<Step Id="opt_design"/> </Simulator>
<Step Id="power_opt_design"/> <Simulator Name="Questa">
<Step Id="place_design"/> <Option Name="Description" Val="Questa Advanced Simulator"/>
<Step Id="post_place_power_opt_design"/> </Simulator>
<Step Id="phys_opt_design"/> <Simulator Name="Riviera">
<Step Id="route_design"/> <Option Name="Description" Val="Riviera-PRO Simulator"/>
<Step Id="post_route_phys_opt_design"/> </Simulator>
<Step Id="write_bitstream"/> <Simulator Name="ActiveHDL">
</Strategy> <Option Name="Description" Val="Active-HDL Simulator"/>
<GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/> </Simulator>
<ReportStrategy Name="Vivado Implementation Default Reports" Flow="Vivado Implementation 2024"/> </Simulators>
<Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> <Runs Version="1" Minor="22">
<RQSFiles/> <Run Id="synth_1" Type="Ft3:Synth" SrcSet="sources_1" Part="xc7a100tcsg324-1" ConstrsSet="constrs_1" Description="Vivado Synthesis Defaults" AutoIncrementalCheckpoint="true" WriteIncrSynthDcp="false" State="current" IncludeInArchive="true" IsChild="false" AutoIncrementalDir="$PSRCDIR/utils_1/imports/synth_1" AutoRQSDir="$PSRCDIR/utils_1/imports/synth_1" ParallelReportGen="true">
</Run> <Strategy Version="1" Minor="2">
</Runs> <StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2024">
<Board> <Desc>Vivado Synthesis Defaults</Desc>
<Jumpers/> </StratHandle>
</Board> <Step Id="synth_design"/>
<DashboardSummary Version="1" Minor="0"> </Strategy>
<Dashboards> <ReportStrategy Name="Vivado Synthesis Default Reports" Flow="Vivado Synthesis 2024"/>
<Dashboard Name="default_dashboard"> <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/>
<Gadgets> <RQSFiles/>
<Gadget Name="drc_1" Type="drc" Version="1" Row="2" Column="0"> </Run>
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_drc_0 "/> <Run Id="impl_1" Type="Ft2:EntireDesign" Part="xc7a100tcsg324-1" ConstrsSet="constrs_1" Description="Default settings for Implementation." AutoIncrementalCheckpoint="false" WriteIncrSynthDcp="false" State="current" SynthRun="synth_1" IncludeInArchive="true" IsChild="false" GenFullBitstream="true" AutoIncrementalDir="$PSRCDIR/utils_1/imports/impl_1" LaunchOptions="-jobs 2 " AutoRQSDir="$PSRCDIR/utils_1/imports/impl_1" ParallelReportGen="true">
</Gadget> <Strategy Version="1" Minor="2">
<Gadget Name="methodology_1" Type="methodology" Version="1" Row="2" Column="1"> <StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2024">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_methodology_0 "/> <Desc>Default settings for Implementation.</Desc>
</Gadget> </StratHandle>
<Gadget Name="power_1" Type="power" Version="1" Row="1" Column="0"> <Step Id="init_design"/>
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_power_0 "/> <Step Id="opt_design"/>
</Gadget> <Step Id="power_opt_design"/>
<Gadget Name="timing_1" Type="timing" Version="1" Row="0" Column="1"> <Step Id="place_design"/>
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_timing_summary_0 "/> <Step Id="post_place_power_opt_design"/>
</Gadget> <Step Id="phys_opt_design"/>
<Gadget Name="utilization_1" Type="utilization" Version="1" Row="0" Column="0"> <Step Id="route_design"/>
<GadgetParam Name="REPORTS" Type="string_list" Value="synth_1#synth_1_synth_report_utilization_0 "/> <Step Id="post_route_phys_opt_design"/>
<GadgetParam Name="RUN.STEP" Type="string" Value="synth_design"/> <Step Id="write_bitstream"/>
<GadgetParam Name="RUN.TYPE" Type="string" Value="synthesis"/> </Strategy>
</Gadget> <ReportStrategy Name="Vivado Implementation Default Reports" Flow="Vivado Implementation 2024"/>
<Gadget Name="utilization_2" Type="utilization" Version="1" Row="1" Column="1"> <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/>
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_place_report_utilization_0 "/> <RQSFiles/>
</Gadget> </Run>
</Gadgets> </Runs>
</Dashboard> <Board/>
<CurrentDashboard>default_dashboard</CurrentDashboard> <DashboardSummary Version="1" Minor="0">
</Dashboards> <Dashboards>
</DashboardSummary> <Dashboard Name="default_dashboard">
</Project> <Gadgets>
<Gadget Name="drc_1" Type="drc" Version="1" Row="2" Column="0">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_drc_0 "/>
</Gadget>
<Gadget Name="methodology_1" Type="methodology" Version="1" Row="2" Column="1">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_methodology_0 "/>
</Gadget>
<Gadget Name="power_1" Type="power" Version="1" Row="1" Column="0">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_power_0 "/>
</Gadget>
<Gadget Name="timing_1" Type="timing" Version="1" Row="0" Column="1">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_timing_summary_0 "/>
</Gadget>
<Gadget Name="utilization_1" Type="utilization" Version="1" Row="0" Column="0">
<GadgetParam Name="REPORTS" Type="string_list" Value="synth_1#synth_1_synth_report_utilization_0 "/>
<GadgetParam Name="RUN.STEP" Type="string" Value="synth_design"/>
<GadgetParam Name="RUN.TYPE" Type="string" Value="synthesis"/>
</Gadget>
<Gadget Name="utilization_2" Type="utilization" Version="1" Row="1" Column="1">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_place_report_utilization_0 "/>
</Gadget>
</Gadgets>
</Dashboard>
<CurrentDashboard>default_dashboard</CurrentDashboard>
</Dashboards>
</DashboardSummary>
</Project>

View File

@ -14,10 +14,79 @@ module playback_controller(
output SPEED speed output SPEED speed
); );
typedef enum logic [2:0] {
PAUSE, PLAY, FF2, FF4, FF8
} state_t;
state_t current, next;
wire play_pulse,ff_pulse; wire play_pulse,ff_pulse;
// NOTE: These might need to be hooked to an even lower clock? Not sure // NOTE: These might need to be hooked to an even lower clock? Not sure
debouncer playDebouncer (clk,reset,play,play_pulse); debouncer playDebouncer (clk,reset,play,play_pulse);
debouncer ffDebouncer (clk,reset,ff,ff_pulse); debouncer ffDebouncer (clk,reset,ff,ff_pulse);
//next state logic
always_comb
begin
unique case (current)
PAUSE:
begin
if (play_pulse) next = PLAY;
else if (ff_pulse) next = FF2;
else next = PAUSE;
end
PLAY:
begin
if (play_pulse) next = PAUSE;
else if (ff_pulse) next = FF2;
else next = PLAY;
end
FF2:
begin
if (play_pulse) next = PAUSE;
else if (ff_pulse) next = FF4;
else next = FF2;
end
FF4:
begin
if (play_pulse) next = PAUSE;
else if (ff_pulse) next = FF8;
else next = FF4;
end
FF8:
begin
if (play_pulse) next = PAUSE;
else if (ff_pulse) next = FF8;
else next = FF8;
end
default:
next = PAUSE;
endcase
end
//output logic
always_comb
begin
unique case (current)
PAUSE: speed = 0;
PLAY: speed = 1;
FF2: speed = 2;
FF4: speed = 4;
FF8: speed = 8;
default:speed = 0;
endcase
end
//sequential logic
always_ff @(posedge clk)
begin
if (reset)
current <= PAUSE;
else
current <= next;
end
endmodule endmodule

View File

@ -56,8 +56,4 @@ initial begin
$finish; $finish;
end end
endmodule endmodule

View File

@ -0,0 +1,106 @@
/****
* playback_controller_tb.sv - a testbench for the playback_controller.sv
* module.
*
* @author: Dilanthi Prentice
* @date: [unsure of due date]
*
* */
`include "sdvd_defs.sv"
import sdvd_defs::SPEED;
module playback_controller_tb;
logic clk, reset;
logic play, ff;
SPEED speed;
int errors;
//instatiate the dut
playback_controller dut(clk, reset, play, ff, speed);
//clock generation
initial clk = 0;
always #5 clk = ~clk;
//play button press
task press_play();
play = 1;
@(posedge clk);
play = 0;
@(posedge clk);
endtask
//ff button press
task press_ff();
ff = 1;
@(posedge clk);
ff = 0;
@(posedge clk);
endtask
initial
begin
@(posedge clk);
play = 0;
ff = 0;
reset = 1;
@(posedge clk);
reset = 0;
@(posedge clk);
assert (speed === 0) else
begin
$error("Speed not zero after reset");
errors++;
end
@(posedge clk);
press_play();
assert (speed === 1) else
begin
$error("Play not working");
errors++;
end
press_play();
assert (speed === 0) else
begin
$error("Pause not working");
errors++;
end
press_ff();
assert (speed === 2) else
begin
$error("Not in FF2 after ff btn pressed once");
errors++;
end
press_ff();
assert (speed === 4) else
begin
$error("Not in FF4 after ff btn pressed twice");
errors++;
end
press_ff();
assert (speed === 8) else
begin
$error("Not in FF8 after ff btn pressed thrice");
errors++;
end
press_play();
assert (speed === 0) else
begin
$error("Unsuccessful return to pause after play btn pressed from a FF state");
errors++;
end
if (errors === 0)
$display("No errors detected in playback_controller");
$finish;
end
endmodule