diff options
author | lonkaars <loek@pipeframe.xyz> | 2022-11-28 09:21:52 +0100 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2022-11-28 09:21:52 +0100 |
commit | 68784722ac52da2743b409414225c68cf516c994 (patch) | |
tree | 71728f63c5b511b71d42f7eecd8700eba1ff90c5 | |
parent | 453e099644b253bedc98bb20861d48f3eb40ef4f (diff) |
fix alu working with longer testbench
l--------- | alu/alu.srcs/sources_1/add8bs.vhd | 1 | ||||
-rw-r--r-- | alu/alu.xpr | 69 | ||||
-rw-r--r-- | design/add8bs.dig | 190 | ||||
-rw-r--r-- | src/add8bs.vhd | 42 | ||||
-rw-r--r-- | src/alu.vhd | 32 |
5 files changed, 290 insertions, 44 deletions
diff --git a/alu/alu.srcs/sources_1/add8bs.vhd b/alu/alu.srcs/sources_1/add8bs.vhd new file mode 120000 index 0000000..b702395 --- /dev/null +++ b/alu/alu.srcs/sources_1/add8bs.vhd @@ -0,0 +1 @@ +../../../src/add8bs.vhd
\ No newline at end of file diff --git a/alu/alu.xpr b/alu/alu.xpr index db0f577..bb1f73a 100644 --- a/alu/alu.xpr +++ b/alu/alu.xpr @@ -42,8 +42,8 @@ <Option Name="SimulatorGccVersionVCS" Val="9.2.0"/> <Option Name="SimulatorGccVersionRiviera" Val="9.3.0"/> <Option Name="SimulatorGccVersionActiveHdl" Val="9.3.0"/> - <Option Name="BoardPart" Val="digilentinc.com:basys3:part0:1.2"/> - <Option Name="BoardPartRepoPaths" Val="$PPRDIR/../../../../.Xilinx/Vivado/2022.2/xhub/board_store/xilinx_board_store"/> + <Option Name="BoardPart" Val=""/> + <Option Name="SourceMgmtMode" Val="DisplayOnly"/> <Option Name="ActiveSimSet" Val="sim_1"/> <Option Name="DefaultLib" Val="xil_defaultlib"/> <Option Name="ProjectType" Val="Default"/> @@ -59,7 +59,7 @@ <Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/> <Option Name="EnableBDX" Val="FALSE"/> <Option Name="DSABoardId" Val="basys3"/> - <Option Name="WTXSimLaunchSim" Val="34"/> + <Option Name="WTXSimLaunchSim" Val="39"/> <Option Name="WTModelSimLaunchSim" Val="0"/> <Option Name="WTQuestaLaunchSim" Val="0"/> <Option Name="WTIesLaunchSim" Val="0"/> @@ -90,13 +90,13 @@ <FileSets Version="1" Minor="31"> <FileSet Name="sources_1" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1" RelGenDir="$PGENDIR/sources_1"> <Filter Type="Srcs"/> - <File Path="$PSRCDIR/sources_1/binary_to_bcd_digit.vhd"> + <File Path="$PSRCDIR/sources_1/add1b.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/binary_to_bcd.vhd"> + <File Path="$PSRCDIR/sources_1/add8b.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> @@ -104,92 +104,87 @@ </File> <File Path="$PSRCDIR/sources_1/alu.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/min8b.vhd"> + <File Path="$PSRCDIR/sources_1/dispdrv.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/add8b.vhd"> + <File Path="$PSRCDIR/sources_1/eq8b.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/twoc.vhd"> + <File Path="$PSRCDIR/sources_1/half_add.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/add1b.vhd"> + <File Path="$PSRCDIR/sources_1/min8b.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/half_add.vhd"> + <File Path="$PSRCDIR/sources_1/rl8b.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/dispdrv.vhd"> + <File Path="$PSRCDIR/sources_1/rr8b.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/eq8b.vhd"> + <File Path="$PSRCDIR/sources_1/sl8b.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> <File Path="$PSRCDIR/sources_1/sr8b.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/rr8b.vhd"> + <File Path="$PSRCDIR/sources_1/twoc.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/sl8b.vhd"> + <File Path="$PSRCDIR/sources_1/binary_to_bcd_digit.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sources_1/rl8b.vhd"> + <File Path="$PSRCDIR/sources_1/binary_to_bcd.vhd"> + <FileInfo> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PSRCDIR/sources_1/add8bs.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> <Config> <Option Name="DesignMode" Val="RTL"/> - <Option Name="TopModule" Val="binary_to_bcd"/> + <Option Name="TopModule" Val="ALU"/> <Option Name="TopAutoSet" Val="TRUE"/> + <Option Name="dataflowViewerSettings" Val="min_width=16"/> </Config> </FileSet> <FileSet Name="constrs_1" Type="Constrs" RelSrcDir="$PSRCDIR/constrs_1" RelGenDir="$PGENDIR/constrs_1"> @@ -200,15 +195,14 @@ </FileSet> <FileSet Name="sim_1" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/sim_1" RelGenDir="$PGENDIR/sim_1"> <Filter Type="Srcs"/> - <File Path="$PSRCDIR/sim_1/alu_tb.vhd"> + <File Path="$PSRCDIR/sim_1/twoc_tb.vhd"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/sim_1/twoc_tb.vhd"> + <File Path="$PSRCDIR/sim_1/alu_tb.vhd"> <FileInfo> - <Attr Name="AutoDisabled" Val="1"/> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> @@ -225,6 +219,7 @@ <Option Name="PamSignalDriverFile" Val="xil_bypass_driver"/> <Option Name="PamPseudoTop" Val="pseudo_tb"/> <Option Name="SrcSet" Val="sources_1"/> + <Option Name="xsim.simulate.runtime" Val="10250ns"/> </Config> </FileSet> <FileSet Name="utils_1" Type="Utils" RelSrcDir="$PSRCDIR/utils_1" RelGenDir="$PGENDIR/utils_1"> @@ -258,7 +253,9 @@ <Runs Version="1" Minor="19"> <Run Id="synth_1" Type="Ft3:Synth" SrcSet="sources_1" Part="xc7a35tcpg236-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"> <Strategy Version="1" Minor="2"> - <StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2022"/> + <StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2022"> + <Desc>Vivado Synthesis Defaults</Desc> + </StratHandle> <Step Id="synth_design"/> </Strategy> <ReportStrategy Name="Vivado Synthesis Default Reports" Flow="Vivado Synthesis 2022"/> @@ -267,7 +264,9 @@ </Run> <Run Id="impl_1" Type="Ft2:EntireDesign" Part="xc7a35tcpg236-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" AutoRQSDir="$PSRCDIR/utils_1/imports/impl_1"> <Strategy Version="1" Minor="2"> - <StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2022"/> + <StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2022"> + <Desc>Default settings for Implementation.</Desc> + </StratHandle> <Step Id="init_design"/> <Step Id="opt_design"/> <Step Id="power_opt_design"/> @@ -283,9 +282,7 @@ <RQSFiles/> </Run> </Runs> - <Board> - <Jumpers/> - </Board> + <Board/> <DashboardSummary Version="1" Minor="0"> <Dashboards> <Dashboard Name="default_dashboard"> diff --git a/design/add8bs.dig b/design/add8bs.dig new file mode 100644 index 0000000..5a02a1e --- /dev/null +++ b/design/add8bs.dig @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="utf-8"?> +<circuit> + <version>1</version> + <attributes/> + <visualElements> + <visualElement> + <elementName>add8b.dig</elementName> + <elementAttributes/> + <pos x="520" y="240"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>A</string> + </entry> + <entry> + <string>Bits</string> + <int>8</int> + </entry> + </elementAttributes> + <pos x="400" y="240"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>B</string> + </entry> + <entry> + <string>Bits</string> + <int>8</int> + </entry> + </elementAttributes> + <pos x="400" y="280"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>Cin</string> + </entry> + </elementAttributes> + <pos x="400" y="320"/> + </visualElement> + <visualElement> + <elementName>add1b.dig</elementName> + <elementAttributes/> + <pos x="520" y="340"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>8,</string> + </entry> + <entry> + <string>splitterSpreading</string> + <int>5</int> + </entry> + <entry> + <string>Output Splitting</string> + <string>0-7,7-7</string> + </entry> + </elementAttributes> + <pos x="480" y="240"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>splitterSpreading</string> + <int>5</int> + </entry> + <entry> + <string>Input Splitting</string> + <string>8,</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>0-7,7-7</string> + </entry> + </elementAttributes> + <pos x="440" y="260"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>X</string> + </entry> + <entry> + <string>Bits</string> + <int>8</int> + </entry> + </elementAttributes> + <pos x="640" y="240"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>Cout</string> + </entry> + </elementAttributes> + <pos x="640" y="340"/> + </visualElement> + </visualElements> + <wires> + <wire> + <p1 x="500" y="240"/> + <p2 x="520" y="240"/> + </wire> + <wire> + <p1 x="400" y="240"/> + <p2 x="480" y="240"/> + </wire> + <wire> + <p1 x="580" y="240"/> + <p2 x="640" y="240"/> + </wire> + <wire> + <p1 x="480" y="320"/> + <p2 x="600" y="320"/> + </wire> + <wire> + <p1 x="400" y="320"/> + <p2 x="460" y="320"/> + </wire> + <wire> + <p1 x="500" y="340"/> + <p2 x="520" y="340"/> + </wire> + <wire> + <p1 x="580" y="340"/> + <p2 x="640" y="340"/> + </wire> + <wire> + <p1 x="460" y="260"/> + <p2 x="520" y="260"/> + </wire> + <wire> + <p1 x="580" y="260"/> + <p2 x="600" y="260"/> + </wire> + <wire> + <p1 x="420" y="260"/> + <p2 x="440" y="260"/> + </wire> + <wire> + <p1 x="460" y="360"/> + <p2 x="520" y="360"/> + </wire> + <wire> + <p1 x="460" y="280"/> + <p2 x="520" y="280"/> + </wire> + <wire> + <p1 x="400" y="280"/> + <p2 x="420" y="280"/> + </wire> + <wire> + <p1 x="480" y="380"/> + <p2 x="520" y="380"/> + </wire> + <wire> + <p1 x="480" y="320"/> + <p2 x="480" y="380"/> + </wire> + <wire> + <p1 x="420" y="260"/> + <p2 x="420" y="280"/> + </wire> + <wire> + <p1 x="600" y="260"/> + <p2 x="600" y="320"/> + </wire> + <wire> + <p1 x="460" y="280"/> + <p2 x="460" y="320"/> + </wire> + </wires> + <measurementOrdering/> +</circuit>
\ No newline at end of file diff --git a/src/add8bs.vhd b/src/add8bs.vhd new file mode 100644 index 0000000..c5a1530 --- /dev/null +++ b/src/add8bs.vhd @@ -0,0 +1,42 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.numeric_std.all; + +entity add8bs is + port ( + A, B: in std_logic_vector(7 downto 0); + Cin: in std_logic; + X: out std_logic_vector(7 downto 0); + Cout: out std_logic); +end add8bs; + +architecture Behavioral of add8bs is + signal C: std_logic; -- Cout0 -> Cin1 + component add8b + port ( + A, B: in std_logic_vector(7 downto 0); + Cin: in std_logic; + X: out std_logic_vector(7 downto 0); + Cout: out std_logic); + end component; + component add1b + port ( + A, B, Cin: in std_logic; + X, Cout: out std_logic); + end component; +begin + add0: component add8b + port map ( + A => A, + B => B, + Cin => Cin, + X => X, + Cout => C); + add1: component add1b + port map ( + A => A(7), + B => B(7), + Cin => C, + X => Cout, + Cout => open); +end Behavioral; diff --git a/src/alu.vhd b/src/alu.vhd index 7da5696..1d3a1e8 100644 --- a/src/alu.vhd +++ b/src/alu.vhd @@ -26,8 +26,22 @@ architecture Behavioral of ALU is R_AllZeros, R_AllOnes, R: std_logic_vector(7 downto 0) := (others => '0'); - signal C_AMinB, C_BMinA, C_MinA, C_MinB: std_logic := '0'; -- Minus carry out (test bench edge case) - component add8b is + signal C_AplusB, + C_AminB, + C_BminA, + C_Dummy, + C_OnlyA, + C_OnlyB, + C_MinA, + C_MinB, + C_ShiftLeftA, + C_ShiftRightA, + C_RotateLeftA, + C_RotateRightA, + C_AllZeros, + C_AllOnes, + C: std_logic := '0'; + component add8bs is port ( A: in std_logic_vector(7 downto 0); B: in std_logic_vector(7 downto 0); @@ -80,13 +94,13 @@ begin R_AllOnes <= x"ff"; R_AllZeros <= x"00"; - AplusB: component add8b + AplusB: component add8bs port map( A => A, B => B, Cin => '0', X => R_AplusB, - Cout => open); + Cout => C_AplusB); AminB: component min8b port map( A => A, @@ -154,14 +168,15 @@ begin R_AllOnes when x"f", -- AllOnes (others => '0') when others; with Op select - Cout <= - R(7) when x"0" | x"3" | x"c" | x"d", -- AplusB, MinA, MinB, Dummy + C <= + C_AplusB when x"0", -- AplusB C_AMinB when x"1", -- AminB C_BMinA when x"2", -- BminA + '0' when x"3" | x"c" | x"d", -- Dummy's A(7) when x"4" | x"8" | x"a", -- OnlyA, ShiftLeftA, RotateLeftA B(7) when x"5", -- OnlyB - C_MinA when x"6", -- MinA TODO FIX - C_MinB when x"7", -- MinB TODO FIX + C_MinA when x"6", -- MinA + C_MinB when x"7", -- MinB '0' when x"9" | x"b" | x"e", -- ShiftRightA, RotateRightA, AllZeros '1' when x"f", -- AllOnes '0' when others; @@ -171,4 +186,5 @@ begin B => B, Equal => Equal); Res <= R; + Cout <= C; end Behavioral; |