diff --git a/.github/actions/create-conda-env/action.yml b/.github/actions/create-conda-env/action.yml index 1c302764..b9fd6066 100644 --- a/.github/actions/create-conda-env/action.yml +++ b/.github/actions/create-conda-env/action.yml @@ -11,15 +11,18 @@ runs: echo "Creating a conda environment for each toolchain with the toolchain installed" conda activate base conda-lock install --conda $(which conda) -n ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-riscv-tools ./conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml - conda-lock install --conda $(which conda) -n ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-esp-tools ./conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml conda deactivate - echo "Add extra toolchain collateral to RISC-V install area" + echo "Add extra toolchain collateral + CIRCT to RISC-V install area" + git submodule update --init ./tools/install-circt conda activate ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-riscv-tools ./scripts/build-toolchain-extra.sh riscv-tools -p $CONDA_PREFIX/riscv-tools - conda deactivate - conda activate ${{ env.conda-env-name-no-time }}-$(date --date "${{ env.workflow-timestamp }}" +%Y%m%d)-esp-tools - ./scripts/build-toolchain-extra.sh esp-tools -p $CONDA_PREFIX/esp-tools + ./tools/install-circt/bin/download-release-or-nightly-circt.sh \ + -f circt-full-shared-linux-x64.tar.gz \ + -i $CONDA_PREFIX \ + -v version-file \ + -x ./conda-reqs/circt.json \ + -g ${{ github.token }} conda deactivate fi shell: bash -leo pipefail {0} diff --git a/.github/scripts/check-commit.sh b/.github/scripts/check-commit.sh index b15c571d..a4a95611 100755 --- a/.github/scripts/check-commit.sh +++ b/.github/scripts/check-commit.sh @@ -45,7 +45,7 @@ search () { done } -submodules=("cva6" "boom" "ibex" "gemmini" "hwacha" "icenet" "nvdla" "rocket-chip" "sha3" "sifive-blocks" "sifive-cache" "testchipip" "riscv-sodor" "mempress" "bar-fetchers" "shuttle") +submodules=("cva6" "boom" "ibex" "gemmini" "hwacha" "icenet" "nvdla" "rocket-chip" "sha3" "rocket-chip-blocks" "rocket-chip-inclusive-cache" "testchipip" "riscv-sodor" "mempress" "bar-fetchers" "shuttle" "constellation" "fft-generator" "hardfloat" "caliptra-aes-acc" "rocc-acc-utils") dir="generators" branches=("master" "main" "dev") search @@ -81,14 +81,20 @@ dir="toolchains" branches=("master") search +submodules=("firesim") +dir="sims" +branches=("main") +search + + submodules=("coremark" "firemarshal" "nvdla-workload" "spec2017") dir="software" branches=("master" "dev") search -submodules=("DRAMSim2" "axe" "barstools" "dsptools" "rocket-dsp-utils" "torture") +submodules=("DRAMSim2" "axe" "barstools" "dsptools" "rocket-dsp-utils" "torture" "fixedpoint" "cde") dir="tools" -branches=("master" "dev") +branches=("master" "dev" "main") search submodules=("fpga-shells") diff --git a/.github/scripts/defaults.sh b/.github/scripts/defaults.sh index 88dca6c1..22532887 100755 --- a/.github/scripts/defaults.sh +++ b/.github/scripts/defaults.sh @@ -29,13 +29,13 @@ REMOTE_COURSIER_CACHE=$REMOTE_WORK_DIR/.coursier-cache # key value store to get the build groups declare -A grouping grouping["group-cores"]="chipyard-cva6 chipyard-ibex chipyard-rocket chipyard-hetero chipyard-boom chipyard-sodor chipyard-digitaltop chipyard-multiclock-rocket chipyard-nomem-scratchpad chipyard-spike chipyard-clone chipyard-prefetchers chipyard-shuttle" -grouping["group-peripherals"]="chipyard-dmirocket chipyard-dmiboom chipyard-spiflashwrite chipyard-mmios chipyard-nocores chipyard-manyperipherals chipyard-chiplike chipyard-tethered" -grouping["group-accels"]="chipyard-mempress chipyard-sha3 chipyard-hwacha chipyard-gemmini chipyard-manymmioaccels chipyard-nvdla" +grouping["group-peripherals"]="chipyard-dmirocket chipyard-dmiboom chipyard-spiflashwrite chipyard-mmios chipyard-nocores chipyard-manyperipherals chipyard-chiplike chipyard-tethered chipyard-symmetric" +grouping["group-accels"]="chipyard-mempress chipyard-sha3 chipyard-hwacha chipyard-gemmini chipyard-manymmioaccels chipyard-nvdla chipyard-aes256ecb" grouping["group-constellation"]="chipyard-constellation" grouping["group-gpu"]="chipyard-vortex chipyard-coalescer coalescer" grouping["group-tracegen"]="tracegen tracegen-boom" -grouping["group-other"]="icenet testchipip constellation rocketchip-amba rocketchip-tlsimple rocketchip-tlwidth rocketchip-tlxbar" -grouping["group-fpga"]="arty vcu118 vc707 arty100t" +grouping["group-other"]="icenet testchipip constellation rocketchip-amba rocketchip-tlsimple rocketchip-tlwidth rocketchip-tlxbar chipyard-clusters" +grouping["group-fpga"]="arty35t arty100t nexysvideo vc707 vcu118" # key value store to get the build strings declare -A mapping @@ -59,6 +59,7 @@ mapping["chipyard-spiflashwrite"]=" CONFIG=SmallSPIFlashRocketConfig EXTRA_SIM_F mapping["chipyard-manyperipherals"]=" CONFIG=ManyPeripheralsRocketConfig EXTRA_SIM_FLAGS='+spiflash0=${LOCAL_CHIPYARD_DIR}/tests/spiflash.img'" mapping["chipyard-chiplike"]=" CONFIG=ChipLikeRocketConfig MODEL=FlatTestHarness MODEL_PACKAGE=chipyard.example verilog" mapping["chipyard-tethered"]=" CONFIG=VerilatorCITetheredChipLikeRocketConfig" +mapping["chipyard-symmetric"]=" CONFIG=MultiSimSymmetricChipletRocketConfig" mapping["chipyard-cloneboom"]=" CONFIG=Cloned64MegaBoomConfig verilog" mapping["chipyard-nocores"]=" CONFIG=NoCoresConfig verilog" mapping["tracegen"]=" CONFIG=NonBlockingTraceGenL2Config" @@ -68,6 +69,8 @@ mapping["chipyard-shuttle"]=" CONFIG=ShuttleConfig" mapping["chipyard-multiclock-rocket"]=" CONFIG=MulticlockRocketConfig" mapping["chipyard-nomem-scratchpad"]=" CONFIG=MMIOScratchpadOnlyRocketConfig" mapping["chipyard-constellation"]=" CONFIG=SharedNoCConfig" +mapping["chipyard-clusters"]=" CONFIG=ClusteredRocketConfig verilog" +mapping["chipyard-aes256ecb"]=" CONFIG=AES256ECBRocketConfig" mapping["chipyard-vortex"]=" CONFIG=RadianceROMConfig" mapping["chipyard-coalescer"]=" CONFIG=MemtraceCoreConfig" @@ -82,7 +85,8 @@ mapping["rocketchip-tlsimple"]="SUB_PROJECT=rocketchip CONFIG=TLSimpleUnitTestCo mapping["rocketchip-tlwidth"]="SUB_PROJECT=rocketchip CONFIG=TLWidthUnitTestConfig" mapping["rocketchip-tlxbar"]="SUB_PROJECT=rocketchip CONFIG=TLXbarUnitTestConfig" -mapping["arty"]="SUB_PROJECT=arty verilog" -mapping["vcu118"]="SUB_PROJECT=vcu118 verilog" -mapping["vc707"]="SUB_PROJECT=vc707 verilog" +mapping["arty35t"]="SUB_PROJECT=arty35t verilog" mapping["arty100t"]="SUB_PROJECT=arty100t verilog" +mapping["nexysvideo"]="SUB_PROJECT=nexysvideo verilog" +mapping["vc707"]="SUB_PROJECT=vc707 verilog" +mapping["vcu118"]="SUB_PROJECT=vcu118 verilog" diff --git a/.github/scripts/run-tests.sh b/.github/scripts/run-tests.sh index 378dae0c..7c60f74a 100755 --- a/.github/scripts/run-tests.sh +++ b/.github/scripts/run-tests.sh @@ -118,6 +118,10 @@ case $1 in make -C $LOCAL_CHIPYARD_DIR/tests run_binary BINARY=$LOCAL_CHIPYARD_DIR/tests/hello.riscv LOADMEM=1 EXTRA_SIM_FLAGS="+cflush_addr=0x2010200" ;; + chipyard-symmetric) + make -C $LOCAL_CHIPYARD_DIR/tests + run_binary BINARY=$LOCAL_CHIPYARD_DIR/tests/symmetric.riscv LOADMEM=1 + ;; tracegen) run_tracegen ;; diff --git a/.github/workflows/chipyard-full-flow.yml b/.github/workflows/chipyard-full-flow.yml index 9c6bf0bc..3d4a9866 100644 --- a/.github/workflows/chipyard-full-flow.yml +++ b/.github/workflows/chipyard-full-flow.yml @@ -65,7 +65,7 @@ jobs: name: setup-repo needs: [change-filters, cancel-prior-workflows] if: needs.change-filters.outputs.needs-rtl == 'true' - runs-on: jktqos + runs-on: as4 steps: - name: Delete old checkout run: | @@ -88,7 +88,7 @@ jobs: run-cfg-finder: name: run-cfg-finder needs: [setup-repo] - runs-on: jktqos + runs-on: as4 steps: - name: Run config finder run: | @@ -101,7 +101,7 @@ jobs: run-tutorial: name: run-tutorial needs: [setup-repo] - runs-on: jktqos + runs-on: as4 steps: - name: Run smoke test run: | @@ -124,7 +124,7 @@ jobs: conda config --add channels litex-hub # installs for example-sky130.yml - conda create -y --prefix ./.conda-sky130 open_pdks.sky130a=1.0.399_0_g63dbde9 + conda create -y --prefix ./.conda-sky130 open_pdks.sky130a=1.0.457_0_g32e8f23 git clone https://github.com/rahulk29/sram22_sky130_macros.git # installs for example-openroad.yml @@ -170,7 +170,7 @@ jobs: cleanup: name: cleanup needs: [run-tutorial] - runs-on: jktqos + runs-on: as4 if: ${{ always() }} steps: - name: Delete repo copy and conda env diff --git a/.github/workflows/chipyard-run-tests.yml b/.github/workflows/chipyard-run-tests.yml index 3e171fef..b524ae37 100644 --- a/.github/workflows/chipyard-run-tests.yml +++ b/.github/workflows/chipyard-run-tests.yml @@ -62,32 +62,11 @@ jobs: - '**/.gitignore' - '.github/ISSUE_TEMPLATE/**' - create-conda-env-jktgz: - name: create-conda-env-jktgz + create-conda-env-as4: + name: create-conda-env-as4 needs: [change-filters, cancel-prior-workflows] if: needs.change-filters.outputs.needs-rtl == 'true' - runs-on: jktgz - steps: - - name: Delete old checkout - run: | - ls -alh . - rm -rf ${{ github.workspace }}/* || true - rm -rf ${{ github.workspace }}/.* || true - ls -alh . - - name: Checkout - uses: actions/checkout@v3 - - name: Git workaround - uses: ./.github/actions/git-workaround - - name: Cleanup conda - uses: ./.github/actions/cleanup-conda - - name: Create conda env - uses: ./.github/actions/create-conda-env - - create-conda-env-jktqos: - name: create-conda-env-jktqos - needs: [change-filters, cancel-prior-workflows] - if: needs.change-filters.outputs.needs-rtl == 'true' - runs-on: jktqos + runs-on: as4 steps: - name: Delete old checkout run: | @@ -109,7 +88,7 @@ jobs: # When adding new prep jobs, please add them to `needs` below setup-complete: name: setup-complete - needs: [create-conda-env-jktgz, create-conda-env-jktqos] + needs: [create-conda-env-as4] runs-on: ubuntu-latest steps: - name: Set up complete @@ -121,7 +100,7 @@ jobs: name: commit-on-master-check needs: [setup-complete] if: needs.change-filters.outputs.needs-rtl == 'true' - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -144,7 +123,7 @@ jobs: name: tutorial-setup-check needs: [setup-complete] if: needs.change-filters.outputs.needs-rtl == 'true' - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -166,7 +145,7 @@ jobs: documentation-check: name: documentation-check needs: [setup-complete] - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -192,7 +171,7 @@ jobs: name: build-extra-tests needs: [setup-complete] if: needs.change-filters.outputs.needs-rtl == 'true' - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -224,7 +203,7 @@ jobs: prepare-chipyard-cores: name: prepare-chipyard-cores needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -246,7 +225,7 @@ jobs: prepare-chipyard-constellation: name: prepare-chipyard-constellation needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -268,7 +247,7 @@ jobs: prepare-chipyard-peripherals: name: prepare-chipyard-peripherals needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -290,7 +269,7 @@ jobs: prepare-chipyard-accels: name: prepare-chipyard-accels needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -312,7 +291,7 @@ jobs: prepare-chipyard-tracegen: name: prepare-chipyard-tracegen needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -334,7 +313,7 @@ jobs: prepare-chipyard-other: name: prepare-chipyard-other needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -356,7 +335,7 @@ jobs: prepare-chipyard-fpga: name: prepare-chipyard-fpga needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -381,7 +360,7 @@ jobs: chipyard-spike-gemmini-run-tests: name: chipyard-spike-gemmini-run-tests needs: prepare-chipyard-accels # technically doesn't depend on RTL but should be after the build.sh for Gemmini - runs-on: jktqos + runs-on: as4 steps: - name: Delete old checkout run: | @@ -410,7 +389,7 @@ jobs: chipyard-rocket-run-tests: name: chipyard-rocket-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -433,7 +412,7 @@ jobs: chipyard-prefetchers-run-tests: name: chipyard-prefetchers-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -456,7 +435,7 @@ jobs: chipyard-hetero-run-tests: name: chipyard-hetero-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -479,7 +458,7 @@ jobs: chipyard-boom-run-tests: name: chipyard-boom-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -502,7 +481,7 @@ jobs: chipyard-shuttle-run-tests: name: chipyard-shuttle-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -525,7 +504,7 @@ jobs: chipyard-cva6-run-tests: name: chipyard-cva6-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -548,7 +527,7 @@ jobs: chipyard-ibex-run-tests: name: chipyard-ibex-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -571,7 +550,7 @@ jobs: chipyard-sodor-run-tests: name: chipyard-sodor-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -594,7 +573,7 @@ jobs: chipyard-spike-run-tests: name: chipyard-spike-run-tests needs: prepare-chipyard-cores - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -617,7 +596,7 @@ jobs: chipyard-dmirocket-run-tests: name: chipyard-dmirocket-run-tests needs: prepare-chipyard-peripherals - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -640,7 +619,7 @@ jobs: chipyard-dmiboom-run-tests: name: chipyard-dmiboom-run-tests needs: prepare-chipyard-peripherals - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -663,7 +642,7 @@ jobs: chipyard-spiflashwrite-run-tests: name: chipyard-spiflashwrite-run-tests needs: prepare-chipyard-peripherals - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -686,7 +665,7 @@ jobs: chipyard-manyperipherals-run-tests: name: chipyard-manyperipherals-run-tests needs: prepare-chipyard-peripherals - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -709,7 +688,7 @@ jobs: chipyard-tethered-run-tests: name: chipyard-tethered-run-tests needs: prepare-chipyard-peripherals - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -729,10 +708,33 @@ jobs: group-key: "group-peripherals" project-key: "chipyard-tethered" + chipyard-symmetric-run-tests: + name: chipyard-symmetric-run-tests + needs: prepare-chipyard-peripherals + runs-on: as4 + steps: + - name: Delete old checkout + run: | + ls -alh . + rm -rf ${{ github.workspace }}/* || true + rm -rf ${{ github.workspace }}/.* || true + ls -alh . + - name: Checkout + uses: actions/checkout@v3 + - name: Git workaround + uses: ./.github/actions/git-workaround + - name: Create conda env + uses: ./.github/actions/create-conda-env + - name: Run tests + uses: ./.github/actions/run-tests + with: + group-key: "group-peripherals" + project-key: "chipyard-symmetric" + chipyard-sha3-run-tests: name: chipyard-sha3-run-tests needs: prepare-chipyard-accels - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -755,7 +757,7 @@ jobs: chipyard-gemmini-run-tests: name: chipyard-gemmini-run-tests needs: prepare-chipyard-accels - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -778,7 +780,7 @@ jobs: chipyard-manymmioaccels-run-tests: name: chipyard-manymmioaccels-run-tests needs: prepare-chipyard-accels - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -801,7 +803,7 @@ jobs: # chipyard-nvdla-run-tests: # name: chipyard-nvdla-run-tests # needs: prepare-chipyard-accels - # runs-on: self-hosted + # runs-on: as4 # steps: # - name: Delete old checkout # run: | @@ -824,7 +826,7 @@ jobs: chipyard-mempress-run-tests: name: chipyard-mempress-run-tests needs: prepare-chipyard-accels - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -848,7 +850,7 @@ jobs: tracegen-boom-run-tests: name: tracegen-boom-run-tests needs: prepare-chipyard-tracegen - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -871,7 +873,7 @@ jobs: tracegen-run-tests: name: tracegen-run-tests needs: prepare-chipyard-tracegen - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -894,7 +896,7 @@ jobs: icenet-run-tests: name: icenet-run-tests needs: prepare-chipyard-other - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -917,7 +919,7 @@ jobs: testchipip-run-tests: name: testchipip-run-tests needs: prepare-chipyard-other - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -940,7 +942,7 @@ jobs: rocketchip-run-tests: name: rocketchip-run-tests needs: prepare-chipyard-other - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -979,7 +981,7 @@ jobs: constellation-run-tests: name: constellation-run-tests needs: prepare-chipyard-other - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -1002,7 +1004,7 @@ jobs: chipyard-constellation-run-tests: name: chipyard-constellation-run-tests needs: prepare-chipyard-constellation - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -1026,7 +1028,7 @@ jobs: firesim-run-tests: name: firesim-run-tests needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -1050,7 +1052,7 @@ jobs: fireboom-run-tests: name: fireboom-run-tests needs: setup-complete - runs-on: self-hosted + runs-on: as4 steps: - name: Delete old checkout run: | @@ -1092,6 +1094,7 @@ jobs: chipyard-spiflashwrite-run-tests, chipyard-manyperipherals-run-tests, chipyard-tethered-run-tests, + chipyard-symmetric-run-tests, chipyard-sha3-run-tests, chipyard-gemmini-run-tests, chipyard-manymmioaccels-run-tests, # chipyard-nvdla-run-tests, diff --git a/.github/workflows/update-circt.yml b/.github/workflows/update-circt.yml new file mode 100644 index 00000000..2d52a155 --- /dev/null +++ b/.github/workflows/update-circt.yml @@ -0,0 +1,25 @@ +name: update-circt + +# run daily +on: + schedule: + - cron: 0,15,30,45 * * * * + #- cron: 0 8 * * * + +defaults: + run: + shell: bash -leo pipefail {0} + +jobs: + update-circt: + name: update-circt + runs-on: ubuntu-latest + steps: + - name: Update CIRCT + uses: circt/update-circt@v1.0.0 + with: + user: 'bartender' + email: 'firesimchipyard@gmail.com' + pr-reviewers: '' + pr-labels: 'changelog:changed' + circt-config: './conda-reqs/circt.json' diff --git a/.gitmodules b/.gitmodules index c3d70dc1..e155d953 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,9 +13,6 @@ [submodule "generators/boom"] path = generators/boom url = https://github.com/riscv-boom/riscv-boom.git -[submodule "generators/sifive-blocks"] - path = generators/sifive-blocks - url = https://github.com/chipsalliance/rocket-chip-blocks.git [submodule "generators/hwacha"] path = generators/hwacha url = https://github.com/ucb-bar/hwacha.git @@ -25,9 +22,6 @@ [submodule "generators/icenet"] path = generators/icenet url = https://github.com/firesim/icenet.git -[submodule "generators/block-inclusivecache-sifive"] - path = generators/sifive-cache - url = https://github.com/chipsalliance/rocket-chip-inclusive-cache.git [submodule "tools/dsptools"] path = tools/dsptools url = https://github.com/ucb-bar/dsptools.git @@ -64,6 +58,9 @@ [submodule "software/nvdla-workload"] path = software/nvdla-workload url = https://github.com/ucb-bar/nvdla-workload.git +[submodule "software/baremetal-ide"] + path = software/baremetal-ide + url = https://github.com/ucb-bar/Baremetal-IDE.git [submodule "generators/riscv-sodor"] path = generators/riscv-sodor url = https://github.com/ucb-bar/riscv-sodor.git @@ -133,6 +130,24 @@ [submodule "generators/hardfloat"] path = generators/hardfloat url = https://github.com/ucb-bar/berkeley-hardfloat.git +[submodule "generators/caliptra-aes-acc"] + path = generators/caliptra-aes-acc + url = https://github.com/ucb-bar/caliptra-aes-acc +[submodule "generators/rocc-acc-utils"] + path = generators/rocc-acc-utils + url = https://github.com/ucb-bar/rocc-acc-utils +[submodule "tools/install-circt"] + path = tools/install-circt + url = https://github.com/circt/install-circt/ +[submodule "toolchains/riscv-tools/riscv-spike-devices"] + path = toolchains/riscv-tools/riscv-spike-devices + url = https://github.com/ucb-bar/spike-devices.git +[submodule "generators/rocket-chip-blocks"] + path = generators/rocket-chip-blocks + url = https://github.com/chipsalliance/rocket-chip-blocks.git +[submodule "generators/rocket-chip-inclusive-cache"] + path = generators/rocket-chip-inclusive-cache + url = https://github.com/chipsalliance/rocket-chip-inclusive-cache.git [submodule "generators/rocket-gpu"] path = generators/rocket-gpu url = git@github.com:hansungk/rocket-gpu.git diff --git a/README.md b/README.md index 0d68cf77..8bb2e3e3 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ These additional publications cover many of the internal components used in Chip ## Acknowledgements -This work is supported by the NSF CCRI ENS Chipyard Award #201662. +This work is supported by the NSF CCRI ENS Chipyard Award #2016662. [hwacha]:https://www2.eecs.berkeley.edu/Pubs/TechRpts/2015/EECS-2015-262.pdf [hammer]:https://github.com/ucb-bar/hammer diff --git a/build.sbt b/build.sbt index cc8edee6..99fff46b 100644 --- a/build.sbt +++ b/build.sbt @@ -95,7 +95,7 @@ lazy val chiselSettings = Seq( // -- Rocket Chip -- -lazy val hardfloat = freshProject("hardfloat", rocketChipDir / "hardfloat/hardfloat") +lazy val hardfloat = freshProject("hardfloat", file("generators/hardfloat/hardfloat")) .settings(chiselSettings) .dependsOn(midasTargetUtils) .settings(commonSettings) @@ -141,17 +141,17 @@ lazy val rocketLibDeps = (rocketchip / Keys.libraryDependencies) lazy val midasTargetUtils = ProjectRef(firesimDir, "targetutils") lazy val testchipip = (project in file("generators/testchipip")) - .dependsOn(rocketchip, sifive_blocks) + .dependsOn(rocketchip, rocketchip_blocks) .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) lazy val chipyard = (project in file("generators/chipyard")) - .dependsOn(testchipip, rocketchip, boom, hwacha, sifive_blocks, sifive_cache, iocell, + .dependsOn(testchipip, rocketchip, boom, hwacha, rocketchip_blocks, rocketchip_inclusive_cache, iocell, radiance, sha3, // On separate line to allow for cleaner tutorial-setup patches dsptools, rocket_dsp_utils, gemmini, icenet, tracegen, cva6, nvdla, sodor, ibex, fft_generator, - constellation, mempress, barf, shuttle) + constellation, mempress, barf, shuttle, caliptra_aes) .settings(libraryDependencies ++= rocketLibDeps.value) .settings( libraryDependencies ++= Seq( @@ -181,7 +181,7 @@ lazy val fft_generator = (project in file("generators/fft-generator")) .settings(commonSettings) lazy val tracegen = (project in file("generators/tracegen")) - .dependsOn(testchipip, rocketchip, sifive_cache, boom) + .dependsOn(testchipip, rocketchip, rocketchip_inclusive_cache, boom) .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) @@ -240,6 +240,16 @@ lazy val nvdla = (project in file("generators/nvdla")) .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) +lazy val caliptra_aes = (project in file("generators/caliptra-aes-acc")) + .dependsOn(rocketchip, rocc_acc_utils, testchipip, midasTargetUtils) + .settings(libraryDependencies ++= rocketLibDeps.value) + .settings(commonSettings) + +lazy val rocc_acc_utils = (project in file("generators/rocc-acc-utils")) + .dependsOn(rocketchip) + .settings(libraryDependencies ++= rocketLibDeps.value) + .settings(commonSettings) + lazy val iocell = Project(id = "iocell", base = file("./tools/barstools/") / "iocell") .settings(chiselSettings) .settings(commonSettings) @@ -275,12 +285,12 @@ lazy val rocket_dsp_utils = freshProject("rocket-dsp-utils", file("./tools/rocke .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) -lazy val sifive_blocks = (project in file("generators/sifive-blocks")) +lazy val rocketchip_blocks = (project in file("generators/rocket-chip-blocks")) .dependsOn(rocketchip) .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) -lazy val sifive_cache = (project in file("generators/sifive-cache")) +lazy val rocketchip_inclusive_cache = (project in file("generators/rocket-chip-inclusive-cache")) .settings( commonSettings, Compile / scalaSource := baseDirectory.value / "design/craft") @@ -300,7 +310,7 @@ lazy val firechip = (project in file("generators/firechip")) Test / testOptions += Tests.Argument("-oF") ) lazy val fpga_shells = (project in file("./fpga/fpga-shells")) - .dependsOn(rocketchip, sifive_blocks) + .dependsOn(rocketchip, rocketchip_blocks) .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) diff --git a/common.mk b/common.mk index c8c29b1f..3763584f 100644 --- a/common.mk +++ b/common.mk @@ -28,7 +28,6 @@ EXTRA_SIM_CXXFLAGS ?= EXTRA_SIM_LDFLAGS ?= EXTRA_SIM_SOURCES ?= EXTRA_SIM_REQS ?= -ENABLE_CUSTOM_FIRRTL_PASS += $(ENABLE_YOSYS_FLOW) ifneq ($(ASPECTS), ) comma = , @@ -58,7 +57,8 @@ HELP_COMMANDS += \ " firrtl = generate intermediate firrtl files from chisel elaboration" \ " run-tests = run all assembly and benchmark tests" \ " launch-sbt = start sbt terminal" \ -" find-config-fragments = list all config. fragments" +" find-config-fragments = list all config. fragments" \ +" check-submodule-status = check that all submodules in generators/ have been initialized" ######################################################################################### # include additional subproject make fragments @@ -84,6 +84,8 @@ endif # Returns a list of files in directories $1 with *any* of the file extensions in $2 lookup_srcs_by_multiple_type = $(foreach type,$(2),$(call lookup_srcs,$(1),$(type))) +CHECK_SUBMODULES_COMMAND = echo "Checking all submodules in generators/ are initialized. Uninitialized submodules will be displayed" ; ! git submodule status $(base_dir)/generators | grep ^- + SCALA_EXT = scala VLOG_EXT = sv v CHIPYARD_SOURCE_DIRS = $(addprefix $(base_dir)/,generators sims/firesim/sim fpga/fpga-shells fpga/src) @@ -119,12 +121,13 @@ $(BOOTROM_TARGETS): $(build_dir)/bootrom.%.img: $(TESTCHIP_RSRCS_DIR)/testchipip ######################################################################################### # compile scala jars ######################################################################################### -$(CHIPYARD_CLASSPATH_TARGETS) &: $(CHIPYARD_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS) +$(CHIPYARD_CLASSPATH_TARGETS) &: $(CHIPYARD_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS) $(CHIPYARD_VLOG_SOURCES) + $(CHECK_SUBMODULES_COMMAND) mkdir -p $(dir $@) $(call run_sbt_assembly,$(SBT_PROJECT),$(CHIPYARD_CLASSPATH)) # order only dependency between sbt runs needed to avoid concurrent sbt runs -$(TAPEOUT_CLASSPATH_TARGETS) &: $(BARSTOOLS_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS) | $(CHIPYARD_CLASSPATH_TARGETS) +$(TAPEOUT_CLASSPATH_TARGETS) &: $(BARSTOOLS_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS) $(BARSTOOLS_VLOG_SOURCES) | $(CHIPYARD_CLASSPATH_TARGETS) mkdir -p $(dir $@) $(call run_sbt_assembly,tapeout,$(TAPEOUT_CLASSPATH)) @@ -227,7 +230,7 @@ $(FINAL_ANNO_FILE): $(EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) $(SFC_LEVEL) touch $@ $(SFC_MFC_TARGETS) &: private TMP_DIR := $(shell mktemp -d -t cy-XXXXXXXX) -$(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(SFC_LEVEL) $(EXTRA_FIRRTL_OPTIONS) $(MFC_LOWERING_OPTIONS) $(CHIPYARD_VLOG_SOURCES) $(BARSTOOLS_VLOG_SOURCES) +$(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(SFC_LEVEL) $(EXTRA_FIRRTL_OPTIONS) $(MFC_LOWERING_OPTIONS) rm -rf $(GEN_COLLATERAL_DIR) $(call run_jar_scala_main,$(TAPEOUT_CLASSPATH),barstools.tapeout.transforms.GenerateModelStageMain,\ --no-dedup \ @@ -246,9 +249,7 @@ $(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_F @if [ $(shell cat $(SFC_LEVEL)) = low ]; then cat $(TMP_DIR)/unnec-anno-deleted2.sfc.anno.json > $(SFC_ANNO_FILE) && rm $(TMP_DIR)/unnec-anno-deleted.sfc.anno.json && rm $(TMP_DIR)/unnec-anno-deleted2.sfc.anno.json; fi firtool \ --format=fir \ - --dedup \ --export-module-hierarchy \ - --emit-metadata \ --verify-each=true \ --warn-on-unprocessed-annotations \ --disable-annotation-classless \ @@ -257,13 +258,13 @@ $(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_F --lowering-options=$(shell cat $(MFC_LOWERING_OPTIONS)) \ --repl-seq-mem \ --repl-seq-mem-file=$(MFC_SMEMS_CONF) \ - --repl-seq-mem-circuit=$(MODEL) \ --annotation-file=$(SFC_ANNO_FILE) \ --split-verilog \ -o $(GEN_COLLATERAL_DIR) \ $(SFC_FIRRTL_FILE) -mv $(SFC_SMEMS_CONF) $(MFC_SMEMS_CONF) 2> /dev/null $(SED) -i 's/.*/& /' $(MFC_SMEMS_CONF) # need trailing space for SFC macrocompiler + touch $(MFC_BB_MODS_FILELIST) # if there are no BB's then the file might not be generated, instead always generate it # DOC include end: FirrtlCompiler $(TOP_MODS_FILELIST) $(MODEL_MODS_FILELIST) $(ALL_MODS_FILELIST) $(BB_MODS_FILELIST) $(MFC_MODEL_HRCHY_JSON_UNIQUIFIED) &: $(MFC_MODEL_HRCHY_JSON) $(MFC_TOP_HRCHY_JSON) $(MFC_FILELIST) $(MFC_BB_MODS_FILELIST) @@ -454,6 +455,14 @@ find-config-fragments: help: @for line in $(HELP_LINES); do echo "$$line"; done +######################################################################################### +# Check submodule status +######################################################################################### + +.PHONY: check-submodule-status +check-submodule-status: + $(CHECK_SUBMODULES_COMMAND) + ######################################################################################### # Implicit rule handling ######################################################################################### diff --git a/conda-reqs/chipyard.yaml b/conda-reqs/chipyard.yaml index 81a3ea67..ec49a0a4 100644 --- a/conda-reqs/chipyard.yaml +++ b/conda-reqs/chipyard.yaml @@ -23,13 +23,13 @@ dependencies: # bundle FireSim driver with deps into installer shell-script - constructor - - gcc<13 - - gxx<13 + - gcc<12 + - gxx<12 - sysroot_linux-64=2.17 # needed to match pre-built CI XRT glibc version - conda-gcc-specs - binutils - - firtool==1.30.0 # from ucb-bar channel - https://github.com/ucb-bar/firtool-feedstock + # firtool handled outside of conda # misc - autoconf @@ -88,7 +88,7 @@ dependencies: - graphviz - expect - dtc - - verilator==5.008 + - verilator==5.020 - screen - elfutils - libdwarf-dev==0.0.0.20190110_28_ga81397fc4 # from ucb-bar channel - using mainline libdwarf-feedstock @@ -102,7 +102,7 @@ dependencies: - sty - open_pdks.sky130a - pip: - - hammer-vlsi[asap7]==1.1.2 + - hammer-vlsi[asap7]==1.2.0 # doc requirements - sphinx diff --git a/conda-reqs/circt.json b/conda-reqs/circt.json new file mode 100644 index 00000000..42d4fa09 --- /dev/null +++ b/conda-reqs/circt.json @@ -0,0 +1,3 @@ +{ + "version": "firtool-1.60.0" +} diff --git a/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml b/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml index 2c3ad90e..f63afc45 100644 --- a/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml +++ b/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml @@ -9,7 +9,7 @@ # To update a single package to the latest version compatible with the version constraints in the source: # conda-lock lock --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml --update PACKAGE # To re-solve the entire environment, e.g. after changing a version constraint in the source file: -# conda-lock -f /scratch/abejgonza/cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy/conda-reqs/esp-tools.yaml -f /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/chipyard.yaml -f /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/esp-tools.yaml --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml +# conda-lock -f /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/chipyard.yaml -f /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/esp-tools.yaml --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml metadata: channels: - url: ucb-bar @@ -21,14 +21,12 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: f800845ae6c2481c1c2508f993d739a035bb8e0338f57b72b74ba660f677f51e + linux-64: de1e2d263317a6a0c7c45acb734d166b9975ff1a94cd138e3427bb7b7bdd8db4 platforms: - linux-64 sources: - - /scratch/abejgonza/cy/conda-reqs/chipyard.yaml - - /scratch/abejgonza/cy/conda-reqs/esp-tools.yaml - - /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/chipyard.yaml - - /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/esp-tools.yaml + - /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/chipyard.yaml + - /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/esp-tools.yaml package: - category: main dependencies: {} @@ -66,25 +64,25 @@ package: - category: main dependencies: {} hash: - md5: a73ecd2988327ad4c8f2c331482917f2 - sha256: 525b7b6b5135b952ec1808de84e5eca57c7c7ff144e29ef3e96ae4040ff432c1 + md5: 01ffc8d36f9eba0ce0b3c1955fa780ee + sha256: fb4b9f4b7d885002db0b93e22f44b5b03791ef3d4efdc9d0662185a0faafd6b6 manager: conda name: ca-certificates optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda - version: 2023.7.22 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda + version: 2023.11.17 - category: main dependencies: {} hash: - md5: 8d22677b00e9ea665f757c70a98d2c6f - sha256: 327b40fc91521ad7ba7cc979e9ae40fafec145536b23c8f87a73cbb403eee1d8 + md5: 9936f9d4393c27069e6ee70338f955a5 + sha256: 5098310ea9ec4dae611a658c1ea26436001b2d2a4ed3c8e9468881337e02682f manager: conda name: conda-standalone optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/conda-standalone-23.7.2-ha770c72_0.conda - version: 23.7.2 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-standalone-23.10.0-ha770c72_0.conda + version: 23.10.0 - category: main dependencies: {} hash: @@ -121,13 +119,13 @@ package: - category: main dependencies: {} hash: - md5: 19410c3df09dfb12d1206132a1d357c5 - sha256: 470d5db54102bd51dbb0c5990324a2f4a0bc976faa493b22193338adb9882e2e + md5: 6185f640c43843e5ad6fd1c5372c3f80 + sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 manager: conda name: font-ttf-ubuntu optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda version: '0.83' - category: main dependencies: {} @@ -143,80 +141,69 @@ package: - category: main dependencies: {} hash: - md5: b9ae31bc2e565684ebaf82d4bd954d55 - sha256: 257495088b78d4344c7ea21145581ed6da1c5bf8320f49b659ce2ed2d6265f76 + md5: 2390dcf3fd78c2c426f1c5b6664fa4b7 + sha256: 12904b795e5cb877ce6a7bb30feba9bfbe1dd38bd5f520e6af8d89a51bb6b6a6 manager: conda name: libgcc-devel_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-devel_linux-64-12.3.0-h8bca6fd_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-11.4.0-h922705a_103.conda + version: 11.4.0 - category: main dependencies: {} hash: - md5: afb656a334c409dd9805508af1c89c7a - sha256: a06235f4c4b85b463d9b8a73c9e10c1b5b4105f8a0ea8ac1f2f5f64edac3dfe7 - manager: conda - name: libgfortran5 - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda - version: 13.1.0 -- category: main - dependencies: {} - hash: - md5: 7c80158949230e6d837186b20b2fcf13 - sha256: b311dad92ffafd29668fca6330dc707f4d7f154a4fa4c3859832897416de39ec + md5: be10a739476d68c464101836773463f1 + sha256: 4957848888d7a8cdc77c605357e759f0c9b08c18510f08a205f567666602ca2b manager: conda name: libstdcxx-devel_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-devel_linux-64-12.3.0-h8bca6fd_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-11.4.0-h922705a_103.conda + version: 11.4.0 - category: main dependencies: {} hash: - md5: 067bcc23164642f4c226da631f2a2e1d - sha256: 6f9eb2d7a96687938c0001166a3b308460a8eb02b10e9d0dd9e251f0219ea05c + md5: 937eaed008f6bf2191c5fe76f87755e9 + sha256: 6c6c49efedcc5709a66f19fb6b26b69c6a5245310fd1d9a901fd5e38aaf7f882 manager: conda name: libstdcxx-ng optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda - version: 13.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda + version: 13.2.0 - category: main dependencies: {} hash: - md5: 9da14a0b14cf61245d1a026b2f281405 - sha256: 423a10bbf512b1530c98c01c414ef97d551d0b0920d393ecc164dde17ce475f7 + md5: ca8ce27415e2e304ec35b3de2af12364 + sha256: b6f56d6c0a95dbd27bdcd5c666781c58c037850cebbaf62536a4fdf2bdcf2a2e manager: conda name: open_pdks.sky130a optional: false platform: linux-64 - url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.440_0_g43e733e-20230724_080446.tar.bz2 - version: 1.0.440_0_g43e733e + url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.460_0_gfdb1863-20231104_052339.tar.bz2 + version: 1.0.460_0_gfdb1863 - category: main dependencies: {} hash: - md5: 0dd193187d54e585cac7eab942a8847e - sha256: 89e8c4436dd04d8b4a0c13c508e930be56973a480a9714171969de953bdafd3a + md5: bfe4b3259a8ac6cdf0037752904da6a7 + sha256: 7e0157e35929711e1a986c18a8bfb7a38a2209cfada16b541ebb0481f74376d6 manager: conda name: python_abi optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.conda + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-4_cp39.conda version: '3.9' - category: main dependencies: {} hash: - md5: 939e3e74d8be4dac89ce83b20de2492a - sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 + md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 + sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d manager: conda name: tzdata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - version: 2023c + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda + version: 2023d - category: main dependencies: font-ttf-dejavu-sans-mono: '' @@ -244,30 +231,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-h4a8ded7_13.tar.bz2 version: 3.10.0 -- category: main - dependencies: - libgfortran5: 13.1.0 h15d22d2_0 - hash: - md5: 506dc07710dd5b0ba63cbf134897fc10 - sha256: 429e1d8a3e70b632df5b876e3fc322a56f769756693daa07114c46fa5098684e - manager: conda - name: libgfortran-ng - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda - version: 13.1.0 - category: main dependencies: _libgcc_mutex: 0.1 conda_forge hash: - md5: 56ca14d57ac29a75d23a39eb3ee0ddeb - sha256: 5d441d80b57f857ad305a65169a6b915d4fd6735cdc9e9bded35d493c91ef16d + md5: 7124cbb46b13d395bdde68f2d215c989 + sha256: 6ebedee39b6bbbc969715d0d7fa4b381cce67e1139862604ffa393f821c08e81 manager: conda name: libgomp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda - version: 13.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda + version: 13.2.0 - category: main dependencies: _libgcc_mutex: 0.1 conda_forge @@ -324,14 +299,14 @@ package: _libgcc_mutex: 0.1 conda_forge _openmp_mutex: '>=4.5' hash: - md5: cd93f779ff018dd85c7544c015c9db3c - sha256: fba897a02f35b2b5e6edc43a746d1fa6970a77b422f258246316110af8966911 + md5: 23fdf1fef05baeb7eadc2aed5fb0011f + sha256: 5e88f658e07a30ab41b154b42c59f079b168acfa9551a75bdc972099453f4105 manager: conda name: libgcc-ng optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda - version: 13.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda + version: 13.2.0 - category: main dependencies: libgcc-ng: '>=12' @@ -344,6 +319,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda version: 1.2.9 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: 93729f7a54b25cb135ac2b67ea3a7603 + sha256: dba8a20acedc6bc3574e4068c196969881462ad831aae267d25fbc9409785a6b + manager: conda + name: aws-c-common + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.10-hd590300_0.conda + version: 0.9.10 - category: main dependencies: libgcc-ng: '>=9.4.0' @@ -370,28 +357,28 @@ package: version: '2.40' - category: main dependencies: - libgcc-ng: '>=9.3.0' + libgcc-ng: '>=12' hash: - md5: a1fd65c7ccbf10880423d82bca54eb54 - sha256: cb521319804640ff2ad6a9f118d972ed76d86bea44e5626c09a13d38f562e1fa + md5: 69b8b6202a07720f448be700e300ccf4 + sha256: 242c0c324507ee172c0e0dd2045814e746bb303d1eb78870d182ceb0abc726a8 manager: conda name: bzip2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda version: 1.0.8 - category: main dependencies: libgcc-ng: '>=12' hash: - md5: e8c18d865be43e2fb3f7a145b6adf1f5 - sha256: c4276b1a0e8f18ab08018b1881666656742b325e0fcf2354f714e924d28683b6 + md5: f5842b88e9cbfa177abfaeacd457a45d + sha256: b68b0611d1c9d0222b56d5fe3d634e7a26979c3aef30f5f48b1593e7249e8f7a manager: conda name: c-ares optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda - version: 1.19.1 + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.24.0-hd590300_0.conda + version: 1.24.0 - category: main dependencies: libgcc-ng: '>=12' @@ -416,18 +403,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/ctags-5.8-h14c3975_1000.tar.bz2 version: '5.8' -- category: main - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - hash: - md5: 6bfb79319763a11c7423c9d0e0ee00b7 - manager: conda - name: dromajo - optional: false - platform: linux-64 - url: https://conda.anaconda.org/ucb-bar/linux-64/dromajo-1.0.0-0_h1234567_g6a6e34e.tar.bz2 - version: 1.0.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -479,17 +454,17 @@ package: version: 5.2.1 - category: main dependencies: - libgcc-ng: '>=7.5.0' - libstdcxx-ng: '>=7.5.0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' hash: - md5: b94cf2db16066b242ebd26db2facbd56 - sha256: 07a5319e1ac54fe5d38f50c60f7485af7f830b036da56957d0bfb7558a886198 + md5: 0e33ef437202db431aa5a928248cf2e8 + sha256: 2a50495b6bbbacb03107ea0b752d8358d4a40b572d124a8cade068c147f344f5 manager: conda name: gmp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.2.1-h58526e2_0.tar.bz2 - version: 6.2.1 + url: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_0.conda + version: 6.3.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -505,16 +480,16 @@ package: version: 1.3.13 - category: main dependencies: - libgcc-ng: '>=10.3.0' + libgcc-ng: '>=12' hash: - md5: 30bd3316aac2d72f498a04b2a49c1050 - sha256: 9a233d5f734f2a4bed786041a9823b69dad5b6757d84341e9f5c822ec89f083b + md5: cb8143aa2e59e9684c41dfdf74af38ac + sha256: 91583f2d85cded2cd81af17f23464888d53a1f1e3424456ee1befc3f73436d7b manager: conda name: gzip optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gzip-1.12-h166bdaf_0.tar.bz2 - version: '1.12' + url: https://conda.anaconda.org/conda-forge/linux-64/gzip-1.13-hd590300_0.conda + version: '1.13' - category: main dependencies: libgcc-ng: '>=12' @@ -558,25 +533,25 @@ package: libgcc-ng: '>=12' libstdcxx-ng: '>=12' hash: - md5: d1db1b8be7c3a8983dcbbbfe4f0765de - sha256: 3c6fab31ed4dc8428605588454596b307b1bd59d33b0c7073c407ab51408b011 + md5: 2785ddf4cb0e7e743477991d64353947 + sha256: 8729021a93e67bb93b4e73ef0a132499db516accfea11561b667635bcd0507e7 manager: conda name: libabseil optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda - version: '20230125.3' + url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230802.1-cxx17_h59595ed_0.conda + version: '20230802.1' - category: main dependencies: libgcc-ng: '>=12' hash: - md5: e805cbec4c29feb22e019245f7e47b6c - sha256: 610a583c2c356fe7a864cd6e5b0fa73c25bdafcfbcada9d0d9f999392a412a51 + md5: aec6c91c7371c26392a06708a73c70e5 + sha256: 40f29d1fab92c847b083739af86ad2f36d8154008cf99b64194e4705a1725d78 manager: conda name: libbrotlicommon optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: @@ -592,15 +567,15 @@ package: version: '1.18' - category: main dependencies: - libgcc-ng: '>=7.5.0' + libgcc-ng: '>=12' hash: - md5: 6f8720dff19e17ce5d48cfe7f3d2f0a3 - sha256: 8c9635aa0ea28922877dc96358f9547f6a55fc7e2eb75a556b05f1725496baf9 + md5: 172bf1cd1ff8629f2b1179945ed45055 + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 manager: conda name: libev optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda version: '4.33' - category: main dependencies: @@ -640,66 +615,64 @@ package: version: 3.4.2 - category: main dependencies: - libgcc-ng: '>=10.3.0' + libgcc-ng: '>=13.2.0' hash: - md5: b62b52da46c39ee2bc3c162ac7f1804d - sha256: 6a81ebac9f1aacdf2b4f945c87ad62b972f0f69c8e0981d68e111739e6720fd7 + md5: c714d905cdfa0e70200f68b80cc04764 + sha256: 0084a1d29a4f8ee3b8edad80eb6c42e5f0480f054f28cf713fb314bebb347a50 + manager: conda + name: libgfortran5 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda + version: 13.2.0 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: d66573916ffcf376178462f1b61c941e + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 manager: conda name: libiconv optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda version: '1.17' - category: main dependencies: libgcc-ng: '>=12' hash: - md5: 1edd9e67bdb90d78cea97733ff6b54e6 - sha256: b19de7bda34eac4fa931be11fa8d7640cdf1441dfd51c91786586a4a4c64c92f + md5: 323e90742f0f48fc22bea908735f55e6 + sha256: 0ef7378818c6d5b407692d02556c32e2f6af31c7542bca5160d0b92a59427fb5 manager: conda name: libjpeg-turbo optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda version: 2.1.5.1 - category: main dependencies: - libgcc-ng: '>=9.4.0' + libgcc-ng: '>=12' hash: - md5: 39b1328babf85c7c3a61636d9cd50206 - sha256: 32f4fb94d99946b0dabfbbfd442b25852baf909637f2eed1ffe3baea15d02aad + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 manager: conda name: libnsl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2 - version: 2.0.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + version: 2.0.1 - category: main dependencies: - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=12.3.0' + libgcc-ng: '>=11.4.0' hash: - md5: 6e4ef6ca28655124dcde9bd500e44c32 - sha256: c8e080ae4d57506238023e98869928ae93564e6407ef5b0c4d3a337e8c2b7662 - manager: conda - name: libopenblas - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda - version: 0.3.24 -- category: main - dependencies: - libgcc-ng: '>=12.3.0' - hash: - md5: bbc8fef17925480272a671b1d83431fa - sha256: 2fa38e53f7d58789283af351f014748a485ec8f4e7db3f150ed6274f50983663 + md5: e6f89a7be0ec320c1b1746971045b0e7 + sha256: c4c5c87f5c717e83299740f6a20393f9a131f05e2e9df63faafd6bb71dc58346 manager: conda name: libsanitizer optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-12.3.0-h0f45ef3_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-11.4.0-h4dcbe23_3.conda + version: 11.4.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -784,6 +757,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda version: 1.3.1 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: 5aa797f8787fe7a17d1b0821485b5adc + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + manager: conda + name: libxcrypt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + version: 4.4.36 - category: main dependencies: libgcc-ng: '>=12' @@ -849,51 +834,51 @@ package: dependencies: libgcc-ng: '>=12' hash: - md5: 681105bccc2a3f7f1a837d47d39c9179 - sha256: ccf61e61d58a8a7b2d66822d5568e2dc9387883dd9b2da61e1d787ece4c4979a + md5: 7dbaa197d7ba6032caf7ae7f32c1efa0 + sha256: 91cc03f14caf96243cead96c76fe91ab5925a695d892e83285461fb927dece5e manager: conda name: ncurses optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda version: '6.4' - category: main dependencies: libgcc-ng: '>=12' hash: - md5: 3cb2c7df59990bd37c2ce27fd906de68 - sha256: 49c569a69608eee784e815179a70c6ae4d088dac42b7df999044f68058d593bb + md5: 2bf1915cc107738811368afcb0993a59 + sha256: 1ef1b7efa69c7fb4e2a36a88316f307c115713698d1c12e19f55ae57c0482995 manager: conda name: nettle optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.8.1-hc379101_1.tar.bz2 - version: 3.8.1 + url: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + version: 3.9.1 - category: main dependencies: libgcc-ng: '>=12' hash: - md5: 5be58359dbbf568c1ec0be87e0c6cb1b - sha256: f6c470ba56c43e5f6c75fd28b05256fd8f5d54d76df29c0652496bf3b104ae2b + md5: 77dab674d16c1525ebe65e67de30de0d + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed manager: conda name: oniguruma optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.8-h166bdaf_0.tar.bz2 - version: 6.9.8 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + version: 6.9.9 - category: main dependencies: ca-certificates: '' libgcc-ng: '>=12' hash: - md5: e5ac5227582d6c83ccf247288c0eb095 - sha256: b113fbac327c90cdc29c2fac0f2a2e5cc0d1918b2a5ffa7abd49b695b9b3c6e9 + md5: 603827b39ea2b835268adb8c821b8570 + sha256: 80efc6f429bd8e622d999652e5cba2ca56fcdb9c16a439d2ce9b4313116e4a87 manager: conda name: openssl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda - version: 3.1.2 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda + version: 3.2.0 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -908,16 +893,17 @@ package: version: 2.7.6 - category: main dependencies: - libgcc-ng: '>=7.5.0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' hash: - md5: 660e72c82f2e75a6b3fe6a6e75c79f19 - sha256: 6a0630fff84b5a683af6185a6c67adc8bdfa2043047fcb251add0d352ef60e79 + md5: 700edd63ccd5fc66b70b1c028cea9a68 + sha256: ae917851474eb3b08812b02c9e945d040808523ec53f828aa74a90b0cdf15f57 manager: conda name: pixman optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2 - version: 0.40.0 + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda + version: 0.42.2 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1122,6 +1108,59 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 version: 0.2.5 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + openssl: '>=3.2.0,<4.0a0' + hash: + md5: 9e51dfd5da37c1817d2a850188861987 + sha256: ec56734a24eee51e2f89bec3d686dd2c4dbb09d0305248b1d14e4c748065dc23 + manager: conda + name: aws-c-cal + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.9-h5d48c4d_2.conda + version: 0.6.9 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + hash: + md5: c55a1a0c1419fcdfce6d21c41b0f92ab + sha256: ce508018c1109d4e5c6b65695639deaa2beea31edc39145bb810efb13ffed2c3 + manager: conda + name: aws-c-compression + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h7f92143_7.conda + version: 0.2.17 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + hash: + md5: a4a83424ad4eab023c6e5b4adf264006 + sha256: 8696e7023fde7c4588db8aedd08ffc0b4041c8449bd9edd50f237534cbcfac93 + manager: conda + name: aws-c-sdkutils + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.13-h7f92143_0.conda + version: 0.1.13 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + hash: + md5: 46bd4e9c2fd10de83bae22f0bb71139b + sha256: ac2082211e7d5fd3036f9abd7e398ef67d5327efb3808f17a30fcab59acacbfb + manager: conda + name: aws-checksums + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h7f92143_6.conda + version: 0.1.17 - category: main dependencies: libgcc-ng: '>=12' @@ -1175,20 +1214,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/findutils-4.6.0-h166bdaf_1001.tar.bz2 version: 4.6.0 -- category: main - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - ncurses: '>=6.3,<7.0a0' - hash: - md5: 46a56cfe00f36b35e2d321bfabebf873 - sha256: c8f93937ad2cdd170200cc5ba32d85229ef65b749544686884abad5a19b8ef7a - manager: conda - name: firtool - optional: false - platform: linux-64 - url: https://conda.anaconda.org/ucb-bar/linux-64/firtool-1.30.0-0_h1234567_gdb40efbcd.conda - version: 1.30.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1206,71 +1231,59 @@ package: - category: main dependencies: binutils_impl_linux-64: '>=2.39' - libgcc-devel_linux-64: 12.3.0 h8bca6fd_0 - libgcc-ng: '>=12.3.0' - libgomp: '>=12.3.0' - libsanitizer: 12.3.0 h0f45ef3_0 - libstdcxx-ng: '>=12.3.0' + libgcc-devel_linux-64: 11.4.0 h922705a_103 + libgcc-ng: '>=11.4.0' + libgomp: '>=11.4.0' + libsanitizer: 11.4.0 h4dcbe23_3 + libstdcxx-ng: '>=11.4.0' sysroot_linux-64: '' hash: - md5: 1e41f51d89695fd3f810e2245517460b - sha256: ccbbb82de1ca95b02477e4340c5791e49424b379c6caa27e89bae3c40b7ad296 + md5: b17749a6ae62cf9a5eafd96a6bcaad0e + sha256: 24d34853611b8758c40fa9d6a0d0b738312f51af9fed8fa6c6422f15ec475763 manager: conda name: gcc_impl_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-12.3.0-he2b93b0_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-11.4.0-h7aa1c59_3.conda + version: 11.4.0 - category: main dependencies: - libgcc-ng: '>=7.5.0' - oniguruma: '>=6.9.3,<6.10.0a0' + libgcc-ng: '>=12' + oniguruma: '>=6.9.9,<6.10.0a0' hash: - md5: 8578ae83310b8c9f5717f1aa65054f36 - sha256: 00e69aec19174e61c70b652bb62c77c0947a27d6720bda0cb8d5be654020804a + md5: 80814f94713e35df60aad6c4b235de87 + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d manager: conda name: jq optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.6-h36c2ea0_1000.tar.bz2 - version: '1.6' + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + version: 1.7.1 - category: main dependencies: - libopenblas: '>=0.3.24,<1.0a0' - hash: - md5: bcddbb497582ece559465b9cd11042e7 - sha256: 92142c12eb42172365c96c865be8f164a2653649b28b23bded0e658f8d5d0815 - manager: conda - name: libblas - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openblas.conda - version: 3.9.0 -- category: main - dependencies: - libbrotlicommon: 1.1.0 hd590300_0 + libbrotlicommon: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: 43017394a280a42b48d11d2a6e169901 - sha256: 4eb58ab712e20d89b712a4a9e53a25ed94f63c36135d3f537ce2c51507c5abc9 + md5: f07002e225d7a60a694d42a7bf5ff53f + sha256: 86fc861246fbe5ad85c1b6b3882aaffc89590a48b42d794d3d5c8e6d99e5f926 manager: conda name: libbrotlidec optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: - libbrotlicommon: 1.1.0 hd590300_0 + libbrotlicommon: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: 8e3e1cb77c4b355a3776bdfb74095bed - sha256: f15b3f3d6b33d46c49f5574e2427b76a3c713e27bf6c043b8f0fd84ffc57d51e + md5: 5fc11c6020d421960607d821310fcd4d + sha256: f751b8b1c4754a2a8dfdc3b4040fa7818f35bbf6b10e905a47d3a194b746b071 manager: conda name: libbrotlienc optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: @@ -1285,6 +1298,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 version: 3.1.20191231 +- category: main + dependencies: + libgfortran5: 13.2.0 ha4646dd_3 + hash: + md5: 73031c79546ad06f1fe62e57fdd021bc + sha256: 5b918950b84605b6865de438757f507b1eff73c96fd562f7022c80028b088c14 + manager: conda + name: libgfortran-ng + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda + version: 13.2.0 - category: main dependencies: gettext: '>=0.21.1,<1.0a0' @@ -1314,21 +1339,21 @@ package: version: '5.39' - category: main dependencies: - c-ares: '>=1.18.1,<2.0a0' - libev: '>=4.33,<4.34.0a0' + c-ares: '>=1.23.0,<2.0a0' + libev: '>=4.33,<5.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.0.8,<4.0a0' + openssl: '>=3.2.0,<4.0a0' hash: - md5: 613955a50485812985c059e7b269f42e - sha256: ecd6b08c2b5abe7d1586428c4dd257dcfa00ee53700d79cdc8bca098fdfbd79a + md5: 700ac6ea6d53d5510591c4344d5c989a + sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb manager: conda name: libnghttp2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda - version: 1.52.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + version: 1.58.0 - category: main dependencies: libgcc-ng: '>=12' @@ -1344,32 +1369,32 @@ package: version: 1.6.39 - category: main dependencies: - libabseil: '>=20230125.3,<20230126.0a0' + libabseil: '>=20230802.1,<20230803.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 78c10e8637a6f8d377f9989327d0267d - sha256: 2e2a9b612b8ef8b928f8efac835cd2914722bbab348fa643b99db2efd3b34185 + md5: 1a0287ab734591ad63603734f923016b + sha256: 3e0f6454190abb27edd2aeb724688ee440de133edb02cbb17d5609ba36aa8be0 manager: conda name: libprotobuf optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda - version: 4.23.3 + url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.24.4-hf27288f_0.conda + version: 4.24.4 - category: main dependencies: libgcc-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 903fa782a9067d5934210df6d79220f6 - sha256: e715fab7ec6b3f3df2a5962ef372ff0f871d215fe819482dcd80357999513652 + md5: 3b6a9f225c3dbe0d24f4fedd4625c5bf + sha256: ee2c4d724a3ed60d5b458864d66122fb84c6ce1df62f735f90d8db17b66cd88a manager: conda name: libsqlite optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda - version: 3.43.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda + version: 3.44.2 - category: main dependencies: libgcc-ng: '>=12' @@ -1433,14 +1458,14 @@ package: gmp: '>=6.2.1,<7.0a0' libgcc-ng: '>=12' hash: - md5: 14d87bdff2cbd3b1179a29fb316ed743 - sha256: 03097f21c75b0936471809e533dbae44af9d9ae696ecf264d1a929fc9f9e4b83 + md5: 4c28f3210b30250037a4a627eeee9e0f + sha256: 008230a53ff15cf61966476b44f7ba2c779826825b9ca639a0a2b44d8f7aa6cb manager: conda name: mpfr optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.0-hb012696_0.conda - version: 4.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda + version: 4.2.1 - category: main dependencies: libffi: '>=3.4.2,<3.5.0a0' @@ -1459,28 +1484,28 @@ package: dependencies: bzip2: '>=1.0.8,<2.0a0' libgcc-ng: '>=12' - libzlib: '>=1.2.12,<1.3.0a0' + libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 69e2c796349cd9b273890bee0febfe1b - sha256: 7a29ec847556eed4faa1646010baae371ced69059a4ade43851367a076d6108a + md5: 679c8961826aa4b50653bce17ee52abe + sha256: 3ca54ff0abcda964af7d4724d389ae20d931159ae1881cfe57ad4b0ab9e6a380 manager: conda name: pcre2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 - version: '10.40' + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda + version: '10.42' - category: main dependencies: libgcc-ng: '>=12' - libnsl: '>=2.0.0,<2.1.0a0' + libxcrypt: '>=4.4.36' hash: - md5: 3e785bff761095eb7f8676f4694bd1b1 - sha256: 6e18c1488d191cb1a43a483f44fffa75668779a29927319b4adeb10da12ad06b + md5: f2cfec9406850991f4e3d960cc9e3321 + sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 manager: conda name: perl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-4_hd590300_perl5.conda + url: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda version: 5.32.1 - category: main dependencies: @@ -1508,6 +1533,19 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda version: '8.2' +- category: main + dependencies: + libgcc-ng: '>=12' + openssl: '>=3.2.0,<4.0a0' + hash: + md5: 3d1b58d2664d96f9fbc0afe5e1d04632 + sha256: f6cc2bdcb5d809bbaae218e03bdefef4a309d1fc7ccc9444fda59bd4553a83f8 + manager: conda + name: s2n + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.0-h06160fa_0.conda + version: 1.4.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1536,17 +1574,17 @@ package: version: '1.34' - category: main dependencies: - libgcc-ng: '>=9.4.0' - libzlib: '>=1.2.11,<1.3.0a0' + libgcc-ng: '>=12' + libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 5b8c42eb62e9fc961af70bdd6a26e168 - sha256: 032fd769aad9d4cad40ba261ab222675acb7ec951a8832455fce18ef33fa8df0 + md5: d453b98d9c83e71da0741bb0ff4d76bc + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e manager: conda name: tk optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2 - version: 8.6.12 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + version: 8.6.13 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -1615,6 +1653,21 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/autoconf-2.71-pl5321h2b4cb7a_1.conda version: '2.71' +- category: main + dependencies: + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + s2n: '>=1.4.0,<1.4.1.0a0' + hash: + md5: c930336aa72995f1b5459b51df3ba841 + sha256: 7426f7444cd43cd7a649670c7330c163b40f40aa832e82be873d9de91e49b05e + manager: conda + name: aws-c-io + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.36-he0cd244_2.conda + version: 0.13.36 - category: main dependencies: libgcc-ng: '>=12' @@ -1644,30 +1697,30 @@ package: version: 3.8.2 - category: main dependencies: - libbrotlidec: 1.1.0 hd590300_0 - libbrotlienc: 1.1.0 hd590300_0 + libbrotlidec: 1.1.0 hd590300_1 + libbrotlienc: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: aeafb07a327e3f14a796bf081ea07472 - sha256: f4ad40d9fddefbf0e920d508fe10b7da77faa3eed20cf09779ea5b78bbf04675 + md5: 39f910d205726805a958da408ca194ba + sha256: a641abfbaec54f454c8434061fffa7fdaa9c695e8a5a400ed96b4f07c0c00677 manager: conda name: brotli-bin optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: - gcc_impl_linux-64: '>=12.3.0,<12.3.1.0a0' + gcc_impl_linux-64: '>=11.4.0,<11.4.1.0a0' hash: - md5: 203fbb799caffdf242ccef5f9879d3a1 - sha256: b9db23cd4fd2df43c06734b3cdb7491e03472679282a058bca7148455704b6a4 + md5: 42003d7074d4daaf287d19987cd927bf + sha256: 2c30ddc6cb51a03fb5f671f55eaabcb9208d6ce701e6de2234518eec43a6f2d1 manager: conda name: conda-gcc-specs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-12.3.0-h83fac38_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-11.4.0-h240829a_3.conda + version: 11.4.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1701,57 +1754,57 @@ package: libpng: '>=1.6.39,<1.7.0a0' libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: e1232042de76d24539a436d37597eb06 - sha256: 1eb913727b54e9aa63c6d9a1177db4e2894cee97c5f26910a2b61899d5ac904f + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 manager: conda name: freetype optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda version: 2.12.1 - category: main dependencies: - gcc_impl_linux-64: 12.3.0.* + gcc_impl_linux-64: 11.4.0.* hash: - md5: cb7c7892032ecf45fcad76d67b6a3e9b - sha256: 19d68909b1016ce07f6d3056e32d23dbade083111ac2110ab1782c1309164234 + md5: 0c8d100583c5fd6d20cd5307aaedaf0d + sha256: b515e9222a8af974024b02c7265bed8e4edf912707a5a8fc207cbc8bc2ac0bff manager: conda name: gcc optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc-12.3.0-h8d2909c_1.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gcc-11.4.0-h7baecda_2.conda + version: 11.4.0 - category: main dependencies: libgcc-ng: '>=12' libidn2: '>=2,<3.0a0' libstdcxx-ng: '>=12' libtasn1: '>=4.19.0,<5.0a0' - nettle: '>=3.8.1,<3.9.0a0' + nettle: '>=3.9.1,<3.10.0a0' p11-kit: '>=0.24.1,<0.25.0a0' hash: - md5: cbe8e27140d67c3f30e01cfb642a6e7c - sha256: 4a47e4558395b98fff4c1c44ad358dade62b350a03b5a784d4bc589d6eb7ac9e + md5: 33eded89024f21659b1975886a4acf70 + sha256: 52d824a5d2b8a5566cd469cae6ad6920469b5a15b3e0ddc609dd29151be71be2 manager: conda name: gnutls optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.7.8-hf3e180e_0.tar.bz2 - version: 3.7.8 + url: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.7.9-hb077bed_0.conda + version: 3.7.9 - category: main dependencies: - gcc_impl_linux-64: 12.3.0 he2b93b0_0 - libstdcxx-devel_linux-64: 12.3.0 h8bca6fd_0 + gcc_impl_linux-64: 11.4.0 h7aa1c59_3 + libstdcxx-devel_linux-64: 11.4.0 h922705a_103 sysroot_linux-64: '' hash: - md5: 3f00aa0a8f8d3924890fecae937cc6bd - sha256: 87c7ec85f76aa065c2c991acd7bbf86d25b4724bc283f793400c14f5d5e39aa0 + md5: dbee4be21eb6dbf596afddf60ff120bf + sha256: 424d9989ea82e6777e569de6873cc56229a8982e274409c344473ad89bb7bbb7 manager: conda name: gxx_impl_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.3.0-he2b93b0_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-11.4.0-h7aa1c59_3.conda + version: 11.4.0 - category: main dependencies: keyutils: '>=1.6.1,<2.0a0' @@ -1777,7 +1830,7 @@ package: lz4-c: '>=1.9.3,<1.10.0a0' lzo: '>=2.10,<3.0a0' openssl: '>=3.0.3,<4.0a0' - xz: '>=5.2.5,<5.3.0a0' + xz: '>=5.2.5,<6.0.0a0' zstd: '>=1.5.2,<1.6.0a0' hash: md5: c0c3973a9f2df3e1a408e3205d86a88d @@ -1788,18 +1841,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.5.2-hada088e_3.tar.bz2 version: 3.5.2 -- category: main - dependencies: - libblas: 3.9.0 18_linux64_openblas - hash: - md5: 93dd9ab275ad888ed8113953769af78c - sha256: b5a3eac5a1e14ad7054a19249afeee6536ab8c9fb6d6ddc26e277f5c3b1acce4 - manager: conda - name: libcblas - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-18_linux64_openblas.conda - version: 3.9.0 - category: main dependencies: gettext: '>=0.21.1,<1.0a0' @@ -1808,28 +1849,16 @@ package: libiconv: '>=1.17,<2.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' + pcre2: '>=10.42,<10.43.0a0' hash: - md5: c6f951789c888f7bbd2dd6858eab69de - sha256: e909b5e648d1ace172aac2ddf9d755f72429b134155a9b07156acb58a77ceee1 + md5: 9bd06b12bbfa6fd1740fd23af4b0f0c7 + sha256: b1b594294a0fe4c9a51596ef027efed9268d60827e8ae61fb7545c521a631e33 manager: conda name: libglib optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda - version: 2.76.4 -- category: main - dependencies: - libblas: 3.9.0 18_linux64_openblas - hash: - md5: a1244707531e5b143c420c70573c8ec5 - sha256: 7b59c9bf8399b34818d36c7bbd30cd447649fe4ff2136d3102bb67da0af67a3a - manager: conda - name: liblapack - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-18_linux64_openblas.conda - version: 3.9.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda + version: 2.78.3 - category: main dependencies: libgcc-ng: '>=12' @@ -1846,6 +1875,20 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.3-hbf9e925_1.conda version: 16.0.3 +- category: main + dependencies: + libgcc-ng: '>=12' + libgfortran-ng: '' + libgfortran5: '>=12.3.0' + hash: + md5: d172b34a443b95f86089e8229ddc9a17 + sha256: 628564517895ee1b09cf72c817548bd80ef1acce6a8214a8520d9f7b44c4cfaf + manager: conda + name: libopenblas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda + version: 0.3.25 - category: main dependencies: lerc: '>=4.0.0,<5.0a0' @@ -1869,20 +1912,20 @@ package: - category: main dependencies: libgcc-ng: '>=12' - libprotobuf: '>=4.23.3,<4.23.4.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' - openssl: '>=3.1.1,<4.0a0' + openssl: '>=3.2.0,<4.0a0' perl: '>=5.32.1,<5.33.0a0 *_perl5' hash: - md5: 434a2df8dbd192cb511290763a4f93d8 - sha256: b0424b21c5d1790c04e96a7d62e10326fa3c8b0c263ad8cb4eda707b94317f98 + md5: 194cc570b66f8726e92eaa58d141b935 + sha256: 30ac68088afe7568df797549a091556cf55ea28154a3f27cb524005ea4be6086 manager: conda name: mosh optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mosh-1.4.0-pl5321hc529e37_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/mosh-1.4.0-pl5321h2f1bd5e_5.conda version: 1.4.0 - category: main dependencies: @@ -1904,24 +1947,25 @@ package: ld_impl_linux-64: '>=2.36.1' libffi: '>=3.4,<4.0a0' libgcc-ng: '>=12' - libnsl: '>=2.0.0,<2.1.0a0' - libsqlite: '>=3.43.0,<4.0a0' + libnsl: '>=2.0.1,<2.1.0a0' + libsqlite: '>=3.44.2,<4.0a0' libuuid: '>=2.38.1,<3.0a0' + libxcrypt: '>=4.4.36' libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' - openssl: '>=3.1.2,<4.0a0' + openssl: '>=3.2.0,<4.0a0' readline: '>=8.2,<9.0a0' - tk: '>=8.6.12,<8.7.0a0' + tk: '>=8.6.13,<8.7.0a0' tzdata: '' xz: '>=5.2.6,<6.0a0' hash: - md5: 3ede353bc605068d9677e700b1847382 - sha256: 18db2220328abee8eb19f51c8df88bcfdf3a557b8181e7f5bda291deb067e40f + md5: 255a7002aeec7a067ff19b545aca6328 + sha256: c0e800d255a771926007043d2859cbbbdb1387477ec813f085640c8887b391a2 manager: conda name: python optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_1_cpython.conda version: 3.9.18 - category: main dependencies: @@ -1945,19 +1989,19 @@ package: - category: main dependencies: libgcc-ng: '>=12' - libsqlite: 3.43.0 h2797004_0 + libsqlite: 3.44.2 h2797004_0 libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' readline: '>=8.2,<9.0a0' hash: - md5: 713f9eac95d051abe14c3774376854fe - sha256: b3db86c1ae67bca79328a5d517330e1c95cf4e1f666e46ac9a90e64caf86449d + md5: 4f2892c672829693fd978d065db4e8be + sha256: bae479520fe770fe11996b4c240923ed097f851fbd2401d55540e551c9dbbef7 manager: conda name: sqlite optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda - version: 3.43.0 + url: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda + version: 3.44.2 - category: main dependencies: libgcc-ng: '>=9.4.0' @@ -1982,14 +2026,14 @@ package: xorg-xextproto: '>=7.3.0,<8.0a0' xorg-xproto: '' hash: - md5: 7590b76c3d11d21caa44f3fc38ac584a - sha256: 3360f81f7687179959a6bf1c762938240172e8bb3aef957e0a14fb12a0b7c105 + md5: 49e482d882669206653b095f5206c05b + sha256: 7a02a7beac472ae2759498550b5fc5261bf5be7a9a2b4648a3f67818a7bfefcf manager: conda name: xorg-libx11 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda - version: 1.8.6 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda + version: 1.8.7 - category: main dependencies: python: '>=3.6' @@ -2014,18 +2058,30 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2 version: 1.4.4 +- category: main + dependencies: + python: '>=3.6' + hash: + md5: 0dc2fce00a160271714647c019e3a8a8 + sha256: e030c0993ef56def50fb3b0262a98ba17295c83b6c696748add22aee406b7bd9 + manager: conda + name: archspec + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.2-pyhd8ed1ab_0.conda + version: 0.2.2 - category: main dependencies: python: '>=3.8' hash: - md5: 964bace0c38ce4733851a2a29679e3f9 - sha256: 1fe9b55d3daeb26ac404ec51f106ce8792d7d6548810ca87600cd9b9e9cfbd6e + md5: 0801250abb3d5b86010e20324f0dde94 + sha256: af221f16a23feea4d91db75b35c5720c9c448814af815fe6d45c5627eb75e897 manager: conda name: argcomplete optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.1.1-pyhd8ed1ab_0.conda - version: 3.1.1 + url: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.2.1-pyhd8ed1ab_0.conda + version: 3.2.1 - category: main dependencies: libgcc-ng: '>=12' @@ -2044,66 +2100,113 @@ package: dependencies: python: '>=3.7' hash: - md5: 3edfead7cedd1ab4400a6c588f3e75f8 - sha256: 063639cd568f5c7a557b0fb1cc27f098598c0d8ff869088bfeb82934674f8821 + md5: 5e4c0743c70186509d1412e03c2d8dfa + sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea manager: conda name: attrs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda - version: 23.1.0 + url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + version: 23.2.0 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + hash: + md5: 21dafb60b5854f82b196f32e5857dec6 + sha256: d2855cd791a95648ac773aa6561c61f9e77450f123c8aa82eea1d66e90d5bfb1 + manager: conda + name: aws-c-event-stream + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h0bcb0bb_8.conda + version: 0.3.2 +- category: main + dependencies: + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-compression: '>=0.2.17,<0.2.18.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + libgcc-ng: '>=12' + hash: + md5: 0b0f7174a0f94d2c9a02fb24f6fc0d00 + sha256: ff7e6252a299a59b7e6494723ef3043ba31643ec2a750b8593037bc757a2c4fa + manager: conda + name: aws-c-http + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.14-hd268abd_3.conda + version: 0.7.14 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 38045de15fdcc13a5052f6387b877703 - sha256: 88a2c81d4933b3d076987f3415739f038245520de12264364f9e6d8b2cd57133 + md5: 171d33a4f1694713e0646dbc98e7f7cf + sha256: 72c5a63962463b0d7c7c95db33266c8dbcdd72cd8ae9ca81d42f253f9d80cdf3 manager: conda name: bcrypt optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.0.1-py39h9fdd4d6_0.conda - version: 4.0.1 + url: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py39h9fdd4d6_0.conda + version: 4.1.2 - category: main dependencies: - python: '>=3.7' + python: '>=3.8' hash: - md5: 2fb79ec81bad9492b6d59a06b3b647a4 - sha256: b6f32491536823e47cf6eb4717dd341385600a2b901235028dedc629a77aeb82 + md5: 550da20b2c2e38be9cc44bb819fda5d5 + sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 manager: conda name: blinker optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.2-pyhd8ed1ab_0.conda - version: 1.6.2 + url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda + version: 1.7.0 - category: main dependencies: python: 2.7.*|>=3.7 hash: - md5: 033eb25fffd222aceeca6d58cd953680 - sha256: 4ff828cceb8f55cb26d23b1a4c174d22c7cd92350221724bcaf2d6632e33fdee + md5: 56febe65315cc388a5d20adf2b39a74d + sha256: 0ff5173f6b20a5c95401aa52d10dbdc05c322fc568dc7417c6f76cf68e706d16 manager: conda name: boltons optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/boltons-23.0.0-pyhd8ed1ab_0.conda - version: 23.0.0 + url: https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda + version: 23.1.1 - category: main dependencies: - brotli-bin: 1.1.0 hd590300_0 - libbrotlidec: 1.1.0 hd590300_0 - libbrotlienc: 1.1.0 hd590300_0 + brotli-bin: 1.1.0 hd590300_1 + libbrotlidec: 1.1.0 hd590300_1 + libbrotlienc: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: 3db48055eab680e43a122e2c7494e7ae - sha256: 8ec33c09c428fcc5fd453e1bd349bb0000ca226716901d356bdf89cdd9b67ab2 + md5: f27a24d46e3ea7b70a1f98e50c62508f + sha256: f2d918d351edd06c55a6c2d84b488fe392f85ea018ff227daac07db22b408f6b manager: conda name: brotli optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda + version: 1.1.0 +- category: main + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + python: '>=3.9,<3.10.0a0' + python_abi: 3.9.* *_cp39 + hash: + md5: c48418c8b35f1d59ae9ae1174812b40a + sha256: e22afb19527a93da24c1108c3e91532811f9c3df64a9473989faf332c98af082 + manager: conda + name: brotli-python + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_1.conda version: 1.1.0 - category: main dependencies: @@ -2121,14 +2224,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 7f3dbc9179b4dde7da98dfb151d0ad22 - sha256: db66e31866ff4250c190788769e3a8a1709237c3e9c38d7143aae95ab75fcb31 + md5: 2011bcf45376341dd1d690263fdbc789 + sha256: afa22b77128a812cb57bc707c297d926561bd225a3d9dd74205d87a3b2d14a96 manager: conda name: certifi optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda - version: 2023.7.22 + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda + version: 2023.11.17 - category: main dependencies: python: '>=3.6.1' @@ -2145,14 +2248,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 313516e9a4b08b12dfb1e1cd390a96e3 - sha256: 0666a95fbbd2299008162e2126c009191e5953d1cad1878bf9f4d8d634af1dd4 + md5: 7f4a9e3fcff3f6356ae99244a014da6a + sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 manager: conda name: charset-normalizer optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda - version: 3.2.0 + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + version: 3.3.2 - category: main dependencies: __unix: '' @@ -2168,28 +2271,28 @@ package: version: 8.1.7 - category: main dependencies: - python: '>=3.6' + python: '>=3.8' hash: - md5: b325bfc4cff7d7f8a868f1f7ecc4ed16 - sha256: f0c2fd0e842899a05ddd7b147fb26424adf58be0e8e54e5bc68b8f7e67d05dcd + md5: 753d29fe41bb881e4b9c004f0abf973f + sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 manager: conda name: cloudpickle optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda - version: 2.2.1 + url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda + version: 3.0.0 - category: main dependencies: - python: '' + python: '>=3.7' hash: - md5: c08b4c1326b880ed44f3ffb04803332f - sha256: ddf1749f0fd5a098a7954d98267cebca83a36b86719ce4ab6fc4aa94ef518432 + md5: 3faab06a954c2a04039983f2c4a50d99 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 manager: conda name: colorama optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.4-pyh9f0ad1d_0.tar.bz2 - version: 0.4.4 + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + version: 0.4.6 - category: main dependencies: python: '>=3.6,<4.0' @@ -2204,16 +2307,16 @@ package: version: 0.4.1 - category: main dependencies: - python: '>=3.6' + python: '>=3.8' hash: - md5: a50559fad0affdbb33729a68669ca1cb - sha256: 3b594bc8aa0b9a51269d54c7a4ef6af777d7fad4bee16b05695e1124de6563f6 + md5: 5cd86562580f274031ede6aa6aa24441 + sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 manager: conda name: cycler optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2 - version: 0.11.0 + url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + version: 0.12.1 - category: main dependencies: expat: '>=2.4.2,<3.0a0' @@ -2232,27 +2335,39 @@ package: dependencies: python: 2.7|>=3.6 hash: - md5: 12d8aae6994f342618443a8f05c652a0 - sha256: 13c887cb4a29e1e853a118cfc0e42b72a7e1d1c50c66c0974885d37f0db30619 + md5: db16c66b759a64dc5183d69cc3745a52 + sha256: 3ff11acdd5cc2f80227682966916e878e45ced94f59c402efb94911a5774e84e manager: conda name: distlib optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda - version: 0.3.7 + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda + version: 0.3.8 +- category: main + dependencies: + python: '>=3.6' + hash: + md5: 67999c5465064480fa8016d00ac768f6 + sha256: 0d01c4da6d4f0a935599210f82ac0630fa9aeb4fc37cbbc78043a932a39ec4f3 + manager: conda + name: distro + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda + version: 1.8.0 - category: main dependencies: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 4f0fa7459a1f40a969aaad418b1c428c - sha256: 97110dd30d9b321b635cc1213e478f5e598ed80c7bdb674c0c7d23d6937f2dfe + md5: adb733ec2ee669f6d010758d054da60f + sha256: 826ae2374fc37a9bb29dd3c7783ba11ffa1e215660a60144e7f759c49686b1af manager: conda name: docutils optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.16-py39hf3d152e_3.tar.bz2 - version: '0.16' + url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2 + version: '0.19' - category: main dependencies: expat: '>=2.4.8,<3.0a0' @@ -2274,26 +2389,26 @@ package: dependencies: python: '>=3.7' hash: - md5: e6518222753f519e911e83136d2158d9 - sha256: c28f715e049fe0f09785660bcbffa175ffb438720e5bc5a60d56d4b08364b315 + md5: f6c211fee3c98229652b60a9a42ef363 + sha256: cf83dcaf9006015c8ccab3fc6770f478464a66a8769e1763ca5d7dff09d11d08 manager: conda name: exceptiongroup optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - version: 1.1.3 + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda + version: 1.2.0 - category: main dependencies: python: '>=3.7' hash: - md5: 3104cf0ab9fb9de393051bf92b10dbe9 - sha256: 47635be45aa6cbfd6af65c13b5f649aef84c484e1897aef625e4ad717663eebc + md5: 0c1729b74a8152fde6a38ba0a2ab9f45 + sha256: 4d742d91412d1f163e5399d2b50c5d479694ebcd309127abb549ca3977f89d2b manager: conda name: filelock optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda - version: 3.12.3 + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda + version: 3.13.1 - category: main dependencies: expat: '>=2.5.0,<3.0a0' @@ -2316,26 +2431,26 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 3d56db0f3499528244df173a6ede4fde - sha256: 4940d9bc55e998ab359ce91e0935c56da370b14d67715f1a5e0a13cf4c15af42 + md5: 194fa03bd6b1054b8de8d48d335e45b2 + sha256: a011b537e04ef72d85ff47d7d60ebc815c457a2790a6ab8d77a0956db78b08e1 manager: conda name: frozenlist optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.0-py39hd1e30aa_0.conda - version: 1.4.0 + url: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.1-py39hd1e30aa_0.conda + version: 1.4.1 - category: main dependencies: python: '>=3.8' hash: - md5: b4a3c7bb3f45d47e085764ff096fa259 - sha256: 7c953b38e7d06be62a80d85dc72f899a90814e21079cb1189aa08ca6277f94ee + md5: bf40f2a8835b78b1f91083d306b493d2 + sha256: 9269a5464698e0fde1f9c78544552817370c26df86e2a5a7518544b6a55ae8ee manager: conda name: fsspec optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.0-pyh1a96a4e_0.conda - version: 2023.9.0 + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.2-pyhca7485f_0.conda + version: 2023.12.2 - category: main dependencies: libgcc-ng: '>=12' @@ -2386,42 +2501,42 @@ package: version: 0.7.6 - category: main dependencies: - gcc: 12.3.0.* - gxx_impl_linux-64: 12.3.0.* + gcc: 11.4.0.* + gxx_impl_linux-64: 11.4.0.* hash: - md5: 52061516ce5d0aebb4282f72ef2347e5 - sha256: 99157a7719683e8a18d31f73a04b7b8e3121181840c9c8066b5c0438d7f49e4f + md5: 4821dd86fa505a0d5b6aacd28ed8291f + sha256: e07c2da262b374fc9aad422a4927660ef96aec6d1445c7673a6ba58a445523a5 manager: conda name: gxx optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gxx-12.3.0-h8d2909c_1.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gxx-11.4.0-h7baecda_2.conda + version: 11.4.0 - category: main dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 + __unix: '' + python: '>=3.8' hash: - md5: 3844897723d78cca5f813ad6bee5fc7b - sha256: e15ee3e17a30738fb8e2adccef809a41b388bcaf3cc9fc895c15287a86e93ce1 + md5: 2ed1fe4b9079da97c44cfe9c2e5078fd + sha256: cd93d5d4b1d98f7ce76a8658c35de9c63e17b3a40e52f40fa2f459e0da83d0b1 manager: conda name: humanfriendly optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/humanfriendly-10.0-py39hf3d152e_4.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd8ed1ab_6.conda version: '10.0' - category: main dependencies: python: '>=3.6' hash: - md5: 34272b248891bddccc64479f9a7fffed - sha256: 9887c35c374ec1847f167292d3fde023cb4c994a4ceeec283072b95440131f09 + md5: 1a76f09108576397c41c0b0c5bd84134 + sha256: 6ee4c986d69ce61e60a20b2459b6f2027baeba153f0a64995fd3cb47c2cc7e07 manager: conda name: idna optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 - version: '3.4' + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda + version: '3.6' - category: main dependencies: python: '>=3.4' @@ -2496,16 +2611,17 @@ package: version: 2.0.0 - category: main dependencies: - python: '' + python: '>=3.9,<3.10.0a0' + python_abi: 3.9.* *_cp39 hash: - md5: 07d85c22a3beb102a48cd123df84c2a6 - sha256: da279af2285d8f575a7f5652e83bf7f36155c4c63154e385a9d171efcc607bc1 + md5: 23255e64bc45e9bc0b7d87c108357ce6 + sha256: cd6f07324a83678072675e8c0720558c807682466181f33eb4d2de03aa8bff49 manager: conda name: jsonpointer optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-2.0-py_0.tar.bz2 - version: '2.0' + url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py39hf3d152e_3.conda + version: '2.4' - category: main dependencies: libgcc-ng: '>=12' @@ -2513,13 +2629,13 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 3822b0ae733e022c10469c0e46bdddc4 - sha256: 760ed6e19a1f5773c7864d1442012f32d058922e7984bf5bca04cdea7d8cb065 + md5: c9f74d717e5a2847a9f8b779c54130f2 + sha256: 620d2aa2c3f016aa569b4a679688cb34f27c05e08555e4860099cf001bd740e4 manager: conda name: kiwisolver optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_1.conda version: 1.4.5 - category: main dependencies: @@ -2527,14 +2643,14 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: a0238daacd28c07735c6bc75aedf2014 - sha256: bbae929b429f39a10432e86d87bf02864e6640287245de71edeac6b3c29b0ff7 + md5: c078f60a823037c75efeb602d2496e3b + sha256: fd3b9387f1edef65c6b82c887e4510ec188f2e2f61d7e9f72795c0bb00dccaa9 manager: conda name: lazy-object-proxy optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.9.0-py39h72bdee0_0.conda - version: 1.9.0 + url: https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.10.0-py39hd1e30aa_0.conda + version: 1.10.0 - category: main dependencies: libgcc-ng: '>=12' @@ -2549,6 +2665,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda version: '2.15' +- category: main + dependencies: + libopenblas: '>=0.3.25,<1.0a0' + hash: + md5: 2b7bb4f7562c8cf334fc2e20c2d28abc + sha256: 8a0ee1de693a9b3da4a11b95ec81b40dd434bd01fa1f5f38f8268cd2146bf8f0 + manager: conda + name: libblas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda + version: 3.9.0 - category: main dependencies: libgcc-ng: '>=12' @@ -2652,31 +2780,19 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda version: 1.3.1 -- category: main - dependencies: - python: '' - hash: - md5: c104d98e09c47519950cffb8dd5b4f10 - sha256: d3a68045ef74a2a7b8c8a55b242fdbc875d362e37adcf793613cf0d8c8e4fbf7 - manager: conda - name: lockfile - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/lockfile-0.12.2-py_1.tar.bz2 - version: 0.12.2 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 9c858d105816f454c6b64f3e19184b60 - sha256: de3be21c64141b6ca1fc404977145ec06291f8efe67077412ac84868ffe7feb0 + md5: ee2b4665b852ec6ff2758f3c1b91233d + sha256: 0fb7a5340855c0b3c7c9259eb57ff00abedf36530ba1daae3434016301b0fa36 manager: conda name: markupsafe optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_1.conda version: 2.1.3 - category: main dependencies: @@ -2709,27 +2825,27 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 413374bab5022a5199c5dd89aef75df5 - sha256: 9b4b426b97d712c1b631bb775aaa1822b06f63a0ca93343c6eee59ab06f2b46c + md5: f668e146a2ed03a4e62ffbb98b3115fb + sha256: a47f46861f206043602b5f8b176e3957dd4a59876b819a2e089d63d52e312412 manager: conda name: msgpack-python optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h4b4f3f3_0.conda - version: 1.0.5 + url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py39h7633fee_0.conda + version: 1.0.7 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 85d78bf46da38d726c8c6bec78f90fa8 - sha256: 130544eb072c154e7548c086f574c71b676139fea0184373bf06065114578510 + md5: 6c87066b599dc8d932437abdc65ed4b9 + sha256: fc292f5174cf9f8669fe144e8ed4c1b79d3061a92e60bca58d189194e65f4959 manager: conda name: multidict optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.4-py39h72bdee0_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.4-py39hd1e30aa_1.conda version: 6.0.4 - category: main dependencies: @@ -2757,34 +2873,16 @@ package: version: 1.0.0 - category: main dependencies: - python: '>=3.8' + python: '>=3.9' hash: - md5: 254f787d5068bc89f578bf63893ce8b4 - sha256: 6b955c8530985fa727ad3323653a54af44ecf453cfdb1b549b3edff609bd3728 + md5: 425fce3b531bed6ec3c74fab3e5f0a1c + sha256: 7629aa4f9f8cdff45ea7a4701fe58dccce5bf2faa01c26eb44cbb27b7e15ca9d manager: conda name: networkx optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.1-pyhd8ed1ab_0.conda - version: '3.1' -- category: main - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libgcc-ng: '>=12' - liblapack: '>=3.9.0,<4.0a0' - libstdcxx-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - hash: - md5: f1c358d06344bd7f9a293f9af4b9b8fc - sha256: 469e5370d7b6c66284e42e5b700ace2793bbb942d3084643082109ffe7590c32 - manager: conda - name: numpy - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py39h6183b62_0.conda - version: 1.25.2 + url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda + version: 3.2.1 - category: main dependencies: libgcc-ng: '>=12' @@ -2805,14 +2903,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 91cda59e66e1e4afe9476f8ef98f5c30 - sha256: ded536a96a00d45a693dbc2971bb688248324dadd129eddda2100e177583d768 + md5: 79002079284aa895f883c6b7f3f88fd6 + sha256: 69b3ace6cca2dab9047b2c24926077d81d236bef45329d264b394001e3c3e52f manager: conda name: packaging optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda - version: '23.1' + url: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + version: '23.2' - category: main dependencies: python: '>=2.7' @@ -2853,14 +2951,26 @@ package: dependencies: python: '>=3.6' hash: - md5: 89e3c7cdde7d3aaa2aee933b604dd07f - sha256: 7d055ffc8a02bf781a89d069db3454b453605cdaff300b82cedcc7133283e47e + md5: 405678b942f2481cecdb3e010f4925d9 + sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a manager: conda name: pkgutil-resolve-name optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda version: 1.3.10 +- category: main + dependencies: + python: '>=3.8' + hash: + md5: 45a5065664da0d1dfa8f8cd2eaf05ab9 + sha256: 9e4ff17ce802159ed31344eb913eaa877688226765b77947b102b42255a53853 + manager: conda + name: platformdirs + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.1.0-pyhd8ed1ab_0.conda + version: 4.1.0 - category: main dependencies: python: '>=3.8' @@ -2878,54 +2988,54 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: b602cc9304197c6bf35f7a130fa8e4b8 - sha256: f16ba7446081fa6e7f29c7af12d6a9b01ad21440d83ebedca9d7185a410f6758 + md5: 4b8a715013375a33ad87a4e118f807d7 + sha256: 7b78075d514c602946a36df7604630c058b80a7378f7d0e29e4a082031fde19b manager: conda name: portalocker optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/portalocker-2.7.0-py39hf3d152e_0.conda - version: 2.7.0 + url: https://conda.anaconda.org/conda-forge/linux-64/portalocker-2.8.2-py39hf3d152e_1.conda + version: 2.8.2 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 1d54d3a75c3192ab7655d9c3d16809f1 - sha256: 846894b31bf26061a9e83b03b10fe46f49fcf1ffc5fb1c7ed79a61706a57004b + md5: 34d2731732bc7de6269657d5d9fd6e79 + sha256: 1f5e5d4ce98df5dbfc8478a3339e3848891fed2f26405676ee39010777245894 manager: conda name: psutil optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39h72bdee0_0.conda - version: 5.9.5 + url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.7-py39hd1e30aa_0.conda + version: 5.9.7 - category: main dependencies: - python: '' + python: '!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,!=3.5' hash: - md5: 06d04c9f8f72ac77911db942eda24fb9 - sha256: b2c1bb18ab7bf36263e0b3f29bd2991a108ec1957051f9f5d925efeaf7ed1344 + md5: fb1a800972b072aa4d16450983c81418 + sha256: 8b116da9acbb471e107203c11acaffcb259aca2367aa7e83e796e43ed5d381b3 manager: conda name: pyasn1 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.4.8-py_0.tar.bz2 - version: 0.4.8 + url: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda + version: 0.5.1 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 00f348bb07e883ceb502b02227b0c900 - sha256: 5ab9b896c57be67ab3c6c837c93688902540cc3eb7b30f79c7fedec8d71e8ec9 + md5: 804fa1f70cdd1029bd9d156f1ab1dd54 + sha256: 7f000431dc121a4d77206942dcccf967e9e7dd34652df45f161f1d32162a510d manager: conda name: pycosat optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.4-py39hb9d737c_1.tar.bz2 - version: 0.6.4 + url: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py39hd1e30aa_0.conda + version: 0.6.6 - category: main dependencies: python: 2.7.*|>=3.4 @@ -2942,14 +3052,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 40e5cb18165466773619e5c963f00a7b - sha256: 3f0f0fadc6084960ec8cc00a32a03529c562ffea3b527eb73b1653183daad389 + md5: 140a7f159396547e9799aa98f9f0742e + sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 manager: conda name: pygments optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - version: 2.16.1 + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + version: 2.17.2 - category: main dependencies: python: '>=3.6' @@ -2988,43 +3098,29 @@ package: version: 3.1.1 - category: main dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 + __unix: '' + python: '>=3.8' hash: - md5: 659013ef00dcd1751bfd26d894f73857 - sha256: 8b8719429dc47dd15252fe65fc77a3ad81f25aa5f4db0e6b1d7cdc54722e6ef4 - manager: conda - name: pyrsistent - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.19.3-py39h72bdee0_0.conda - version: 0.19.3 -- category: main - dependencies: - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - hash: - md5: d34b97a2386932b97c7cb80916a673e7 - sha256: 42d46baeab725d3c70d22a4258549e9f0f1a72b740166cd9c3b394c4369cb306 + md5: 2a7de29fb590ca14b5243c4c812c8025 + sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b manager: conda name: pysocks optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pysocks-1.7.1-py39hf3d152e_5.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 version: 1.7.1 - category: main dependencies: python: '>=3.6' hash: - md5: 2590495f608a63625e165915fb4e2e34 - sha256: 0108888507014fb24573c31e4deceb61c99e63d37776dddcadd7c89b2ecae0b6 + md5: c79cacf8a06a51552fc651652f170208 + sha256: d2381037bf362c78654a8ece0e0f54715e09113448ddd7ed837f688536cbf176 manager: conda name: python-tzdata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda - version: '2023.3' + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.4-pyhd8ed1ab_0.conda + version: '2023.4' - category: main dependencies: python: '>=3.6' @@ -3057,13 +3153,13 @@ package: python_abi: 3.9.* *_cp39 yaml: '>=0.2.5,<0.3.0a0' hash: - md5: ccecb3196b3678e9b5fc8441d681c203 - sha256: d8cd6c7646977641e8c0326a5cb13c2e3784b03e07b5a3748846c0dbb3c8d208 + md5: 37218233bcdc310e4fde6453bc1b40d8 + sha256: 28b147c50ad48215f9427a52811848223ac0371be7caae88522e661a3bfb1448 manager: conda name: pyyaml optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_1.conda version: 6.0.1 - category: main dependencies: @@ -3071,55 +3167,54 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 4c03c01af9e4b4a100f450210ce938a3 - sha256: 8bad81d66b1dce677b1e9bb5c95070c665a6643643b8019c363f5f7948a059a9 + md5: 775fa081f76b6e6197bd12bd28856546 + sha256: 9dc5eb83c637131caac6cdc6e48775712475eb02820d0eba30c10605cfde0f89 manager: conda name: regex optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/regex-2023.8.8-py39hd1e30aa_0.conda - version: 2023.8.8 + url: https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py39hd1e30aa_0.conda + version: 2023.12.25 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: d9da3b1d13895666f4cc2559d37b8de4 - sha256: b75af1f9c7a7f26215f7afbaa6fb84f34c08cf1bca6d5b8b248267dea62f4742 + md5: d6358075cf3adab3d41db038560943ad + sha256: 92ffa0aea7f984a2fab97d517aa54f8370ca45f8bdd9bbdb245cd577f8e68c8c + manager: conda + name: rpds-py + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.16.2-py39h9fdd4d6_0.conda + version: 0.16.2 +- category: main + dependencies: + libgcc-ng: '>=12' + python: '>=3.9,<3.10.0a0' + python_abi: 3.9.* *_cp39 + hash: + md5: 743d996a1af8502f27770fadfd418434 + sha256: 06b089d59ffebef9c9171a8a3480adcb6e7f112caef9f8b87591207427cb1cf1 manager: conda name: ruamel.yaml.clib optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py39h72bdee0_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py39hd1e30aa_2.conda version: 0.2.7 -- category: main - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - yaml: '>=0.2.5,<0.3.0a0' - hash: - md5: f862616e19cd2aaa411d24725116b486 - sha256: 762f7719759ea01a81817424cc23d45e595aeabaa6e27adc0a70dadedd4301d2 - manager: conda - name: ruamel_yaml - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruamel_yaml-0.15.80-py39hb9d737c_1008.tar.bz2 - version: 0.15.80 - category: main dependencies: python: '>=3.7' hash: - md5: 4fe12573bf499ff85a0a364e00cc5c53 - sha256: dc5a777597e05ceddefc87d2f96389b7ae0afb097e558307af83a453db3e3887 + md5: fc2166155db840c634a1291a5c35a709 + sha256: 851901b1f8f2049edb36a675f0c3f9a98e1495ef4eb214761b048c6f696a06f7 manager: conda name: setuptools optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda - version: 68.1.2 + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + version: 68.2.2 - category: main dependencies: python: '' @@ -3134,16 +3229,16 @@ package: version: 1.16.0 - category: main dependencies: - python: '' + python: '>=3.5' hash: - md5: 3a8dc70789709aa315325d5df06fb7e4 - sha256: 091de70ee6bfe063e0c0f77336975d124fd1e3f49b9c58d97c0c7b3d287c0002 + md5: 62f26a3d1387acee31322208f0cfa3e0 + sha256: 23011cb3e064525bdb8787c75126a2e78d2344a72cd6773922006d1da1f2af16 manager: conda name: smmap optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/smmap-3.0.5-pyh44b312d_0.tar.bz2 - version: 3.0.5 + url: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + version: 5.0.0 - category: main dependencies: python: '>=2' @@ -3196,14 +3291,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 62f5b331c53d73e2f6c4c130b53518a0 - sha256: dc4abf58ca42f29e12b8c0f8aadedfca49cc1e97dab025d15cf000b1787df773 + md5: 074d0ce7a6261ab8b497c3518796ef3e + sha256: 53cc436ab92d38683df1320e4468a8b978428e800195bf1c8c2460e90b0bc117 manager: conda name: tomlkit optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.1-pyha770c72_0.conda - version: 0.12.1 + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + version: 0.12.3 - category: main dependencies: python: '>=3.5' @@ -3222,38 +3317,38 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: ee7f18d58a96b04fdbd2e55f7694ae0d - sha256: eb7b3bc5e515acc138411b466ca64cee56c5b6123ab13ee1cfc21f0f66713e5d + md5: cbe186eefb0bcd91e8f47c3908489874 + sha256: dc0df742be0e83a4286137d21f60ca829632c2ffd66d3bebb603afe5ce74cc68 manager: conda name: tornado optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_1.conda version: 6.3.3 - category: main dependencies: python: '>=3.6' hash: - md5: 1b133b01430fc4d03efba737aae0054f - sha256: 272505b7f8acc7dad0a32efc17e7241c18938f98c0055c5d5fb2530a32e34fe1 + md5: 13ce724cb44f7bc0ca0971d76e333c30 + sha256: c1c54f4b2b5b39c420b3a47dd6196355147c798c0a4a2bdaaba80435e9591fb3 manager: conda name: types-pytz optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-pytz-2023.3.0.1-pyhd8ed1ab_0.conda - version: 2023.3.0.1 + url: https://conda.anaconda.org/conda-forge/noarch/types-pytz-2023.3.1.1-pyhd8ed1ab_0.conda + version: 2023.3.1.1 - category: main dependencies: python: '>=3.6' hash: - md5: 22776dce28e8ba933e5cbcf20b62c583 - sha256: 61121b7ac3c6caf322ad2789ffe0887ae9e6c3ab28c9e911871afe5977828af7 + md5: 0cb14c80f66937df894d60626dd1921f + sha256: 91873f91a58337d0573584bcdc540ff5545bc460eda0fdd8bd2f471c808c0e4c manager: conda name: types-pyyaml optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.11-pyhd8ed1ab_0.conda - version: 6.0.12.11 + url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda + version: 6.0.12.12 - category: main dependencies: python: '>=3.6' @@ -3268,30 +3363,30 @@ package: version: 1.26.25.14 - category: main dependencies: - python: '>=3.7' + python: '>=3.8' hash: - md5: c39d6a09fe819de4951c2642629d9115 - sha256: 6edd6d5be690be492712cb747b6d62707f0d0c34ef56eefc796d91e5a03187d1 + md5: a92a6440c3fe7052d63244f3aba2a4a7 + sha256: f3c5be8673bfd905c4665efcb27fa50192f24f84fa8eff2f19cba5d09753d905 manager: conda name: typing_extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda - version: 4.7.1 + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda + version: 4.9.0 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 230d65004135bf312504a1bbcb0c7a08 - sha256: 03c2cf05d1f4f2b01fc1e3ced22d5f331f2f233e335c4a4cd11a31fea1fccc0c + md5: 1da984bbb6e765743e13388ba7b7b2c8 + sha256: 90077cbf116112d5112b7beedf896e59c98416d09860ba98c06a770c014829b2 manager: conda name: unicodedata2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2 - version: 15.0.0 + url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py39hd1e30aa_0.conda + version: 15.1.0 - category: main dependencies: flex: '>=2.6.4,<3.0a0' @@ -3303,64 +3398,76 @@ package: perl: '' python: '' hash: - md5: efb0e7909f1a41159856e688e216bd26 - sha256: c24f5fc704ee3c0737456e7a4b8f75114b25a51812c6f801a22ed43652e0b211 + md5: 0b2929f84fe7d3a6117439507d5d50d9 + sha256: 1d6af07d2d19be7adc296e8b6c43bd3eb12b48d8ab8e0cec566e8f9872661813 manager: conda name: verilator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/verilator-5.008-h514fc35_1.conda - version: '5.008' + url: https://conda.anaconda.org/conda-forge/linux-64/verilator-5.020-h7cd9344_0.conda + version: '5.020' - category: main dependencies: - python: '' + python: '>=3.8' hash: - md5: 3563be4c5611a44210d9ba0c16113136 - sha256: 302f4f4bd1ad00c0be1426ecf6bb01db59cfd8aff3de0cf1596526dca1a6b70e + md5: bf4a1d1a97ca27b0b65bacd9e238b484 + sha256: ca757d0fc2dbd422af9d3238a8b4b630a6e11df3707a447bd89540656770d1d7 + manager: conda + name: wcwidth + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.12-pyhd8ed1ab_0.conda + version: 0.2.12 +- category: main + dependencies: + python: '>=2.6' + hash: + md5: daf5160ff9cde3a468556965329085b9 + sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 manager: conda name: webencodings optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-py_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda version: 0.5.1 - category: main dependencies: python: '>=3.8' hash: - md5: 23f16ffe9711ac76b391c60ce4ea4656 - sha256: 93aecd1b6b0fcb0ffbf96e367e56713824e648f6c02c9daaaedfef5f8e03caa9 + md5: 50ad31e07d706aae88b14a4ac9c73f23 + sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f manager: conda name: websocket-client optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.2-pyhd8ed1ab_0.conda - version: 1.6.2 + url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda + version: 1.7.0 - category: main dependencies: python: '>=3.7' hash: - md5: 1ccd092478b3e0ee10d7a891adbf8a4f - sha256: 21bcec5373b04d739ab65252b5532b04a08d229865ebb24b5b94902d6d0a77b0 + md5: 1cdea58981c5cbc17b51973bcaddcea7 + sha256: 80be0ccc815ce22f80c141013302839b0ed938a2edb50b846cf48d8a8c1cfa01 manager: conda name: wheel optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda - version: 0.41.2 + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda + version: 0.42.0 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 6bafe9bada45b1188748b658b8a6c5cf - sha256: a0e68749cd65b40637a4470d777a21f1b2cd5ca6b6af858e3d8b4d91ba131aa3 + md5: 3f562f7f2196e9569cef20e0d5280244 + sha256: cb48fd73e68deb8fac83a254897166fb9e396ed86199796075eace9fbceca04e manager: conda name: wrapt optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.15.0-py39h72bdee0_0.conda - version: 1.15.0 + url: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py39hd1e30aa_0.conda + version: 1.16.0 - category: main dependencies: python: '>=3.6' @@ -3436,14 +3543,14 @@ package: dependencies: python: '>=3.8' hash: - md5: 2da0451b54c4563c32490cb1b7cf68a1 - sha256: 16d72127e150a3d5cbdc0b82c4069ef5be135c64bc99e71e7928507910669b41 + md5: 2e4d6bc0b14e10f895fc6791a7d9b26a + sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 manager: conda name: zipp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda - version: 3.16.2 + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + version: 3.17.0 - category: main dependencies: frozenlist: '>=1.1.0' @@ -3457,19 +3564,52 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2 version: 1.3.1 +- category: main + dependencies: + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-c-sdkutils: '>=0.1.13,<0.1.14.0a0' + libgcc-ng: '>=12' + hash: + md5: d42aebb91e28e2fee2a0218cfbff2c90 + sha256: b06ef95458fc70af4230c9c6690011235cd25288752ff7aa25492fc6d1c0e028 + manager: conda + name: aws-c-auth + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.8-h538f98c_2.conda + version: 0.7.8 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + libgcc-ng: '>=12' + hash: + md5: 0cca0a3d7dc82f219ac46635478952f6 + sha256: 246276b22393302b4e9acb934ec40bb78d3be74e7bd2c110272b46c5370a60ee + manager: conda + name: aws-c-mqtt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.10-h35285c7_2.conda + version: 0.9.10 - category: main dependencies: python: '>=3.7' pytz: '' + setuptools: '' hash: - md5: ac432e732804a81ddcf29c92ead57cde - sha256: 2d9b8768bf8b45073830f7104278c6eb17d78b0f509c9d818ff06b9c4d60283a + md5: 9669586875baeced8fc30c0826c3270e + sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6 manager: conda name: babel optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda - version: 2.12.1 + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + version: 2.14.0 - category: main dependencies: fontconfig: '>=2.14.2,<3.0a0' @@ -3505,14 +3645,14 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 20080319ef73fbad74dcd6d62f2a3ffe - sha256: 485a8f65c58c26c7d48bfea20ed1d6f1493f3329dd2c9c0a888a1c2b7c2365c5 + md5: ac992767d7f8ed2cb27e71e78f0fb2d7 + sha256: 1536a2ca65caaf568bbdfe75aff8e12cb0e0507587b25af3b532a8bd22cb3ddb manager: conda name: cffi optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39he91dace_3.conda - version: 1.15.1 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py39h7a31438_0.conda + version: 1.16.0 - category: main dependencies: libclang-cpp16: '>=16.0.3,<16.1.0a0' @@ -3579,22 +3719,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/cmake-3.26.3-h077f3f9_0.conda version: 3.26.3 -- category: main - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.16' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - hash: - md5: 54e6f32e448fdc273606011f0940d076 - sha256: 61a3d4a322dc310fa53ec3d8f58d6f9ef75f1fcacfcda88b1e4fabd7506b36c2 - manager: conda - name: contourpy - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py39h7633fee_0.conda - version: 1.1.0 - category: main dependencies: krb5: '>=1.20.1,<1.21.0a0' @@ -3637,7 +3761,7 @@ package: libstdcxx-ng: '>=10.3.0' libzlib: '>=1.2.11,<1.3.0a0' sqlite: '>=3.38.2,<4.0a0' - xz: '>=5.2.5,<5.3.0a0' + xz: '>=5.2.5,<6.0.0a0' zstd: '>=1.5.2,<1.6.0a0' hash: md5: 2e9ec0e21d51118b004f1f98e4fbf598 @@ -3657,27 +3781,27 @@ package: python_abi: 3.9.* *_cp39 unicodedata2: '>=14.0.0' hash: - md5: de06dc7edaddbd3b60c050f3a95d6fe6 - sha256: 44485a521b03d351942b2080c861cdfab0015ab177aace442e6cbaeaeb08d561 + md5: 01eba09d574310de928abf121f89b116 + sha256: 1678f7623f057f07760c26a81f74180355c14cb808addcfc45b7a4ea04356b8d manager: conda name: fonttools optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py39hd1e30aa_0.conda - version: 4.42.1 + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.47.0-py39hd1e30aa_0.conda + version: 4.47.0 - category: main dependencies: - python: '>=3.4' - smmap: '>=3.0.1,<4' + python: '>=3.7' + smmap: '>=3.0.1,<6' hash: - md5: 3706d2f3d7cb5dae600c833345a76132 - sha256: 0003ab2b971913380633c711bf49a54dcf06e179986c725b0925854b58878377 + md5: 623b19f616f2ca0c261441067e18ae40 + sha256: 52ab2798be31b8f509eeec458712f447ced4f96ecb672c6c9a42778f47e07b1b manager: conda name: gitdb optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.10-pyhd8ed1ab_0.conda - version: 4.0.10 + url: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + version: 4.0.11 - category: main dependencies: python: '>=3.6' @@ -3710,27 +3834,27 @@ package: python: '>=3.8' zipp: '>=0.5' hash: - md5: 4e9f59a060c3be52bc4ddc46ee9b6946 - sha256: 2797ed927d65324309b6c630190d917b9f2111e0c217b721f80429aeb57f9fcf + md5: 746623a787e06191d80a2133e5daff17 + sha256: e72d05f171f4567004c9360a838e9d5df21e23dcfeb945066b53a6e5f754b861 manager: conda name: importlib-metadata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - version: 6.8.0 + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.1-pyha770c72_0.conda + version: 7.0.1 - category: main dependencies: - python: '>=3.7' + python: '>=3.8' zipp: '>=3.1.0' hash: - md5: 748955a096313b51b314263402b83250 - sha256: f6a7af42e185bb188e6959c4af909cebacd291e2e1ceea6b2f246bb4da93eb7e + md5: 3d5fa25cf42f3f32a12b2d874ace8574 + sha256: e584f9ae08fb2d242af0ce7e19e3cd2f85f362d8523119e08f99edb962db99ed manager: conda name: importlib_resources optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-5.13.0-pyhd8ed1ab_0.conda - version: 5.13.0 + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda + version: 6.1.1 - category: main dependencies: more-itertools: '' @@ -3760,16 +3884,16 @@ package: - category: main dependencies: jsonpointer: '>=1.9' - python: '>=3.6' + python: '>=3.8' hash: - md5: 09150b51b0528a31a0f6500b96fdde82 - sha256: d87fd8da2d3327744821b6b1d1e5b76e4077224fb626ce02d6623a1bc6ee2563 + md5: bfdb7c5c6ad1077c82a69a8642c87aff + sha256: fbb17e33ace3225c6416d1604637c1058906b8223da968cc015128985336b2b4 manager: conda name: jsonpatch optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.32-pyhd8ed1ab_0.tar.bz2 - version: '1.32' + url: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda + version: '1.33' - category: main dependencies: python: '' @@ -3783,6 +3907,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/junit-xml-1.9-pyh9f0ad1d_0.tar.bz2 version: '1.9' +- category: main + dependencies: + libblas: 3.9.0 20_linux64_openblas + hash: + md5: 36d486d72ab64ffea932329a1d3729a3 + sha256: 0e34fb0f82262f02fcb279ab4a1db8d50875dc98e3019452f8f387e6bf3c0247 + manager: conda + name: libcblas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda + version: 3.9.0 - category: main dependencies: expat: '>=2.5.0,<3.0a0' @@ -3807,6 +3943,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda version: 2.3.3 +- category: main + dependencies: + libblas: 3.9.0 20_linux64_openblas + hash: + md5: 6fabc51f5e647d09cc010c40061557e0 + sha256: ad7745b8d0f2ccb9c3ba7aaa7167d62fc9f02e45eb67172ae5f0dfb5a3b1a2cc + manager: conda + name: liblapack + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda + version: 3.9.0 - category: main dependencies: python: '' @@ -3825,21 +3973,21 @@ package: - category: main dependencies: libgcc-ng: '>=12' - mypy_extensions: '>=0.4.3' + mypy_extensions: '>=1.0.0' psutil: '>=4.0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 tomli: '>=1.1.0' - typing_extensions: '>=3.10' + typing_extensions: '>=4.1.0' hash: - md5: 6d56b56423312707fb857b483871de1e - sha256: 901aaa7448c938d7506fc6ff5723d0a1bb077ccb4f5cfbb8019b42877da22dc2 + md5: 1a30eefd87f32b65815198dafe7d16c4 + sha256: 3f2141bc34b200258c50c3e3dd291903718d92fcf760854a4bbc189e861438df manager: conda name: mypy optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.5.1-py39hd1e30aa_0.conda - version: 1.5.1 + url: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.8.0-py39hd1e30aa_0.conda + version: 1.8.0 - category: main dependencies: python: 2.7|>=3.7 @@ -3882,14 +4030,27 @@ package: setuptools: '' wheel: '' hash: - md5: e2783aa3f9235225eec92f9081c5b801 - sha256: 9e401b171856e12f6aa32ae5cc1ae1d3708aa7d705ddf359ee7dd0dffd73c2b5 + md5: 8591c748f98dcc02253003533bc2e4b1 + sha256: 29096d1d53c61aeef518729add2f405df86b3629d1d738a35b15095e6a02eeed manager: conda name: pip optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - version: 23.2.1 + url: https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda + version: 23.3.2 +- category: main + dependencies: + python: '>=3.7' + wcwidth: '' + hash: + md5: 59ba1bf8ea558751a0d391249a248765 + sha256: 78c2f3c6195ec350d7d6e5fa3e43274ca8191c181c97a867e2920faaeec0e9bc + manager: conda + name: prompt-toolkit + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda + version: 3.0.38 - category: main dependencies: colorama: '' @@ -3900,14 +4061,14 @@ package: python: '>=3.7' tomli: '>=1.0.0' hash: - md5: 003aaefc025d902eec9ed8118e76ace7 - sha256: 713f1fd92a4a3d097646f0ca59b0531ad86e74d8a3184667380c99926f540fa6 + md5: a9d145de8c5f064b5fa68fb34725d9f4 + sha256: 8979721b7f86b183d21103f3ec2734783847d317c1b754f462f407efc7c60886 manager: conda name: pytest optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.1-pyhd8ed1ab_0.conda - version: 7.4.1 + url: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.4-pyhd8ed1ab_0.conda + version: 7.4.4 - category: main dependencies: python: '>=3.6' @@ -3940,6 +4101,20 @@ package: platform: linux-64 url: https://conda.anaconda.org/ucb-bar/linux-64/qemu-5.0.0-hb15d774_0.tar.bz2 version: 5.0.0 +- category: main + dependencies: + attrs: '>=22.2.0' + python: '>=3.8' + rpds-py: '>=0.7.0' + hash: + md5: a33161b983172ba6ef69d5fc850650cd + sha256: a6768fabc12f1eed87fec68c5c65439e908655cded1e458d70a164abbce13287 + manager: conda + name: referencing + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda + version: 0.30.2 - category: main dependencies: python: '>=3.5' @@ -3956,16 +4131,16 @@ package: - category: main dependencies: pyasn1: '>=0.1.3' - python: '' + python: '>=3.6' hash: - md5: 3452ab3790dbb1df9508b3fa4ea2f806 - sha256: 6ea0fcd8f40c7f78e2c6cff344bb91f457682aa352ee48364246371a41410ee8 + md5: 03bf410858b2cefc267316408a77c436 + sha256: 23214cdc15a41d14136754857fd9cd46ca3c55a7e751da3b3a48c673f0ee2a57 manager: conda name: rsa optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/rsa-4.7.2-pyh44b312d_0.tar.bz2 - version: 4.7.2 + url: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9-pyhd8ed1ab_0.tar.bz2 + version: '4.9' - category: main dependencies: libgcc-ng: '>=12' @@ -3974,14 +4149,14 @@ package: ruamel.yaml.clib: '>=0.1.2' setuptools: '' hash: - md5: 9195e245f63b036613cca28dd499efdf - sha256: 3bf4ce9639e4acc647ad878a331714c0982df00702440c0f4993fbd6ce2bde99 + md5: b64be7a2bbc2acc61c1a2161512387c2 + sha256: 1dd205a1ab9897482804b5ef3f2a1cea44f01e831d1bcff439d1e0894ab0e4a9 manager: conda name: ruamel.yaml optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.32-py39hd1e30aa_0.conda - version: 0.17.32 + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.21-py39h72bdee0_3.conda + version: 0.17.21 - category: main dependencies: __unix: '' @@ -4015,26 +4190,40 @@ package: python: '>=3.6' types-urllib3: <1.27 hash: - md5: 700fb06cd011d594305e3b487d5a96a2 - sha256: 3be4637a6037786dd6a8b0aed6374c8455fd79987770bc755ce12713aae916a4 + md5: 69d8b100b4a9e557e33c06b0d3ba4772 + sha256: 2ec1bfb9ffbcdd880f60139d46df88e60cd8d0a404f4e0e498500671b34c1d5b manager: conda name: types-requests optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.2-pyhd8ed1ab_0.conda - version: 2.31.0.2 + url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.6-pyhd8ed1ab_0.conda + version: 2.31.0.6 - category: main dependencies: - typing_extensions: 4.7.1 pyha770c72_0 + typing_extensions: 4.9.0 pyha770c72_0 hash: - md5: f96688577f1faa58096d06a45136afa2 - sha256: d5d19b8f5b275240c19616a46d67ec57250b3720ba88200da8c732c3fcbfc21d + md5: c16524c1b7227dc80b36b4fa6f77cc86 + sha256: d795c1eb1db4ea147f01ece74e5a504d7c2e8d5ee8c11ec987884967dd938f9c manager: conda name: typing-extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda - version: 4.7.1 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.9.0-hd8ed1ab_0.conda + version: 4.9.0 +- category: main + dependencies: + brotli-python: '>=1.0.9' + pysocks: '>=1.5.6,<2.0,!=1.5.7' + python: '>=3.7' + hash: + md5: bf61cfd2a7f212efba378167a07d4a6a + sha256: 1cc0bab65a6ad0f5a8bd7657760a4fb4e670d30377f9dab88b792977cb3687e7 + manager: conda + name: urllib3 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.18-pyhd8ed1ab_0.conda + version: 1.26.18 - category: main dependencies: gettext: '>=0.21.1,<1.0a0' @@ -4044,30 +4233,45 @@ package: perl: '>=5.32.1,<5.33.0a0 *_perl5' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 - xorg-libx11: '>=1.8.6,<2.0a0' + xorg-libx11: '>=1.8.7,<2.0a0' xorg-libxt: '>=1.3.0,<2.0a0' hash: - md5: a0f36da7e54b1f43efb0cd0340199b7b - sha256: 5686d022d58ad6d1941bb0d4f7d02ee5b47f655072dfed191b2778ede51c00ae + md5: 8024965420fb58bb3a7c38bba7843cb7 + sha256: 388c5ad10d126111bb8c6d04d543cd25e2fe96926c0ba20c6a4e01d7a79c8c09 manager: conda name: vim optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/vim-9.0.1435-py39pl5321hb4338c2_0.conda - version: 9.0.1435 + url: https://conda.anaconda.org/conda-forge/linux-64/vim-9.0.2059-py39pl5321hb4338c2_1.conda + version: 9.0.2059 +- category: main + dependencies: + distlib: <1,>=0.3.7 + filelock: <4,>=3.12.2 + platformdirs: <5,>=3.9.1 + python: '>=3.8' + hash: + md5: c119653cba436d8183c27bf6d190e587 + sha256: 50827c3721a9dbf973b568709d4381add2a6552fa562f26a385c5edc16a534af + manager: conda + name: virtualenv + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda + version: 20.25.0 - category: main dependencies: markupsafe: '>=2.1.1' python: '>=3.8' hash: - md5: e41528da0d8b8bbf4acc7255192132e3 - sha256: b426b0fcb6137ef858746ef86bddee7f0c881a9c84b67ed40b2feb1b5b47f5b6 + md5: af8d825d93dbe6331ee6d61c69869ca0 + sha256: b7ac49549d370a411b1d6150d24243a15adcce07f1c61ec2ea1b536346e47aa0 manager: conda name: werkzeug optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-2.3.7-pyhd8ed1ab_0.conda - version: 2.3.7 + url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda + version: 3.0.1 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -4092,27 +4296,27 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 453d1199297e5ac3f6b70bd92f0bb000 - sha256: 051f6c6e556ece9587342cf951ee64c2e605abf1d4753c2c1f4a84352727a0d0 + md5: c8654dea9ff4b633fbdfddff7e321bb9 + sha256: 871782b22363b3fb449e2a29a3620045a1c40643e3726767f5b9cd4455ec36c7 manager: conda name: yarl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.2-py39hd1e30aa_0.conda - version: 1.9.2 + url: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.3-py39hd1e30aa_0.conda + version: 1.9.3 - category: main dependencies: python: '>=3.7' typing-extensions: '>=4.0.0' hash: - md5: 578ae086f225bc2380c79f3b551ff2f7 - sha256: bbabfd4400b03ba6c50d0a55e777e0c3ba900af8dabedb9b8aded774484b5d53 + md5: 997c29372bdbe2afee073dff71f35923 + sha256: 3a2c98154d95cfd54daba6b7d507d31f5ba07ac2ad955c44eb041b66563193cd manager: conda name: annotated-types optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.5.0-pyhd8ed1ab_0.conda - version: 0.5.0 + url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.6.0-pyhd8ed1ab_0.conda + version: 0.6.0 - category: main dependencies: python: '>=3.7' @@ -4128,19 +4332,38 @@ package: version: 4.0.3 - category: main dependencies: - cffi: '>=1.0.0' + aws-c-auth: '>=0.7.8,<0.7.9.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 + openssl: '>=3.2.0,<4.0a0' hash: - md5: a639fdd9428d8b25f8326a3838d54045 - sha256: 293229afcd31e81626e5cfe0478be402b35d29b73aa421a49470645debda5019 + md5: f27f792aa83c7be3ee96d09a637a6474 + sha256: 04142edf1a574e137a9e30a4f4e9b9448e219b6f4216a782ceaed933f27852a6 manager: conda - name: brotlipy + name: aws-c-s3 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotlipy-0.7.0-py39hb9d737c_1005.tar.bz2 - version: 0.7.0 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.4-h0448019_0.conda + version: 0.4.4 +- category: main + dependencies: + jmespath: '>=0.7.1,<2.0.0' + python: '>=3.8' + python-dateutil: '>=2.1,<3.0.0' + urllib3: '>=1.25.4,<1.27' + hash: + md5: d6850c205e9f86502bd6a58e270e8fd5 + sha256: ad25216fd91ac9a624ffde69679c3d476c4091adad30b9169aa3486bd25e1e88 + manager: conda + name: botocore + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 - category: main dependencies: clang-format-16: 16.0.3 default_h1cdf331_2 @@ -4195,16 +4418,16 @@ package: itsdangerous: '>=2.1.2' jinja2: '>=3.1.2' python: '>=3.8' - werkzeug: '>=2.3.7' + werkzeug: '>=3.0.0' hash: - md5: 9b0d29067484a8dfacfae85b8fba81bc - sha256: 4f84ffdc5471236e8225db86c7508426b46aa2c3802d58ca40b3c3e174533b39 + md5: d26105227a24c82fdf160f20ed379400 + sha256: 73dafd8c1ae9ee9e42e5fa78275c8dc3b456879d83dc6d6ed82d92bd498c9184 manager: conda name: flask optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/flask-2.3.3-pyhd8ed1ab_0.conda - version: 2.3.3 + url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.0-pyhd8ed1ab_0.conda + version: 3.0.0 - category: main dependencies: curl: '' @@ -4213,32 +4436,32 @@ package: libgcc-ng: '>=12' libiconv: '>=1.17,<2.0a0' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' + openssl: '>=3.2.0,<4.0a0' + pcre2: '>=10.42,<10.43.0a0' perl: 5.* hash: - md5: 96ad24c67e0056d171385859c43218a2 - sha256: 6f6b3d60da46f53f1e1708a63d6ce5f119e6aba0f5243326b7ecaf3b0cdbc6d4 + md5: 851970792301b407ba4c35e75e796791 + sha256: 73a065e160d759e8fb0b169e615955a8fe0c148ed00c7f6ddf076f2e4adfd765 manager: conda name: git optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/git-2.42.0-pl5321h86e50cf_0.conda - version: 2.42.0 + url: https://conda.anaconda.org/conda-forge/linux-64/git-2.43.0-pl5321h7bc287a_0.conda + version: 2.43.0 - category: main dependencies: gitdb: '>=4.0.1,<5' python: '>=3.7' typing_extensions: '>=3.7.4.3' hash: - md5: 3c3d8c89c2fe64dc925ca492d67fab1a - sha256: e70b7c7c072f099af8ab004feb099f72e85f60fed2dc1e3dcedf166903ab9822 + md5: 6bf74c3b7c13079a91d4bd3da51cefcf + sha256: 6b85809ffbfe5c1887b674bf0492cc4dd1ac8a25f4d9fa20ef404be92186259b manager: conda name: gitpython optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.34-pyhd8ed1ab_0.conda - version: 3.1.34 + url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda + version: 3.1.40 - category: main dependencies: cairo: '>=1.16.0,<2.0a0' @@ -4259,47 +4482,43 @@ package: version: 7.3.0 - category: main dependencies: - importlib_resources: '>=5.13.0,<5.13.1.0a0' - python: '>=3.7' + importlib_resources: '>=6.1.1,<6.1.2.0a0' + python: '>=3.8' hash: - md5: 5facf625dd29f34c73733030a10a62a0 - sha256: c989be0c74b25061ba4eec92a9caddca0a916d7a45b05aa306278295b0a29965 + md5: d04bd1b5bed9177dd7c3cef15e2b6710 + sha256: 89492a6619776e83d30fcdc6915fcb3a657cd345abcf68fdf6655540494ab0f0 manager: conda name: importlib-resources optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-5.13.0-pyhd8ed1ab_0.conda - version: 5.13.0 + url: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.1.1-pyhd8ed1ab_0.conda + version: 6.1.1 - category: main dependencies: - importlib-metadata: '>=6.8.0,<6.8.1.0a0' + importlib-metadata: '>=7.0.1,<7.0.2.0a0' hash: - md5: b279b07ce18058034e5b3606ba103a8b - sha256: b96e01dc42d547d6d9ceb1c5b52a5232cc04e40153534350f702c3e0418a6b3f + md5: 4a2f43a20fa404b998859c6a470ba316 + sha256: bc362df1d4f5a04c38dff29cd9c2d0ac584f9c4b45d3e4683ee090944a38fba4 manager: conda name: importlib_metadata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda - version: 6.8.0 + url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.1-hd8ed1ab_0.conda + version: 7.0.1 - category: main dependencies: - attrs: '>=17.4.0' - importlib-metadata: '' importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - pyrsistent: '!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0' - python: '>=3.7' - typing_extensions: '' + python: '>=3.8' + referencing: '>=0.25.0' hash: - md5: 723268a468177cd44568eb8f794e0d80 - sha256: 4f68a23430d1afc5c9b41c46fbac0ade33c0bf57a293c646bfdd6dc65350eada + md5: 7c27ea1bdbe520bb830dcadd59f55cbf + sha256: 7b0061e106674f27cc718f79a095e90a5667a3635ec6626dd23b3be0fd2bfbdc manager: conda - name: jsonschema + name: jsonschema-specifications optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda - version: 4.17.3 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda + version: 2023.7.1 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4315,79 +4534,62 @@ package: version: 0.0.0.20190110_28_ga81397fc4 - category: main dependencies: + libblas: '>=3.9.0,<4.0a0' + libcblas: '>=3.9.0,<4.0a0' libgcc-ng: '>=12' + liblapack: '>=3.9.0,<4.0a0' libstdcxx-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.8.1' - python-tzdata: '>=2022a' python_abi: 3.9.* *_cp39 - pytz: '>=2020.1' hash: - md5: 0a3624f600f51df010a274176e356ac5 - sha256: 60958d7e48cbff540ae7fa3a1c7ed81ee2fef0253d27ad73d7c42027dacd0e50 + md5: 459a58eda3e74dd5e3d596c618e7f20a + sha256: da2439d911005c9c83e7586f72014f58958ff0b0dbc7a3c38c14fbbe2841b455 manager: conda - name: pandas + name: numpy optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py39hddac248_0.conda - version: 2.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py39h474f0d3_0.conda + version: 1.26.2 - category: main dependencies: pip: '' python: '>=3.6' hash: - md5: 5bde4ebca51438054099b9527c904ecb - sha256: bb6b283c27a8293cfd6d439959da45e848e401130fe3b44e31cde8243fdebdee + md5: 8dbab5ba746ed14aa32cb232dc437f8f + sha256: 4c83853fc6349de163c2871613e064e5fdab91723db9b50bcda681adc05e4b87 manager: conda name: pbr optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda - version: 5.11.1 + url: https://conda.anaconda.org/conda-forge/noarch/pbr-6.0.0-pyhd8ed1ab_0.conda + version: 6.0.0 - category: main dependencies: - python: '>=3.7' - typing-extensions: '>=4.6.3' + prompt-toolkit: '>=3.0.38,<3.0.39.0a0' hash: - md5: 0809187ef9b89a3d94a5c24d13936236 - sha256: 1b5c0ca2f4260c7dd8cfccd8a641c1e41876c79dc594506be379cde08f5b471e + md5: 45b74f64d8808eda7e6f6e6b1d641fd2 + sha256: c0f24a75d27918eb33f86902aa6024783d128a89eb3a169bcb22f24163a422b3 manager: conda - name: platformdirs + name: prompt_toolkit optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda - version: 3.10.0 + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda + version: 3.0.38 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 - typing-extensions: '>=4.2.0' + typing-extensions: '>=4.6.0,!=4.7.0' hash: - md5: cfc14a4f4467475813805c86c6bf1da3 - sha256: de9dca982e4aa8c75d5537396d044345bb932d872afd64566a2600c8ee12884b - manager: conda - name: pydantic - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.12-py39hd1e30aa_1.conda - version: 1.10.12 -- category: main - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - typing-extensions: '>=4.6.0' - hash: - md5: e52f02654a9613d84002a492b6f54a39 - sha256: d8c6ba4a823b4a3e964b6155394206c598569393e5625f3b75fb3cf79a0b442c + md5: 26910c0ed0b85e87d5c1dd19723b2996 + sha256: 3770a69799d1366629a9944fb2eef9c15ecfd4c0d00cabee8b264d23bebf3726 manager: conda name: pydantic-core optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.1.2-py39h9fdd4d6_0.conda - version: 2.1.2 + url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.14.6-py39h9fdd4d6_1.conda + version: 2.14.6 - category: main dependencies: cffi: '>=1.4.1' @@ -4397,13 +4599,13 @@ package: python_abi: 3.9.* *_cp39 six: '' hash: - md5: 1022b37795420d806b7b36b4e622ee9b - sha256: 937447b9122e4fe2525aba3568bd0635123e6293564b157ccb6753300553d84e + md5: b7595c0ba694ee1b6cca8d6e76d9f3f8 + sha256: 92ab9febd08bf59bd21ca851829b7af075b9b182aecc54e025fcbad620034897 manager: conda name: pynacl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py39hb9d737c_2.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py39hd1e30aa_3.conda version: 1.5.0 - category: main dependencies: @@ -4421,29 +4623,45 @@ package: - category: main dependencies: pytest: '>=5.0' - python: '>=3.7' + python: '>=3.8' hash: - md5: fcd2531bc3e492657aeb042349aeaf8a - sha256: d2f6a46fe31dea91b427bcc57302edc345eb763caf3c6b6dcd09b2aee002324b + md5: ac9fedc9a0c397f2318e82525491dd83 + sha256: 58d3bd93a0cf9b51ac105de1e01b1fcd1fcfa5993023b67658344e329b02d6e0 manager: conda name: pytest-mock optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.11.1-pyhd8ed1ab_0.conda - version: 3.11.1 + url: https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.12.0-pyhd8ed1ab_0.conda + version: 3.12.0 +- category: main + dependencies: + certifi: '>=2017.4.17' + charset-normalizer: '>=2,<4' + idna: '>=2.5,<4' + python: '>=3.7' + urllib3: '>=1.21.1,<3' + hash: + md5: a30144e4156cdbb236f99ebb49828f8b + sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad + manager: conda + name: requests + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda + version: 2.31.0 - category: main dependencies: pip: '' python: '>=3.7,<4.0' hash: - md5: 6f590190c5393999bbc399ff15096bc3 - sha256: 000ed005cc95397866267072230e2f08407f5898ba2ac469200018492e73a875 + md5: aaafd70a6934549210865f558a0eee96 + sha256: 4e695e4d83cfc4ffd557cc2bdbecc0cedb9df8831d1a415b8e8c0e5f96bc6b5f manager: conda name: types-awscrt optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-awscrt-0.19.1-pyhd8ed1ab_0.conda - version: 0.19.1 + url: https://conda.anaconda.org/conda-forge/noarch/types-awscrt-0.20.0-pyhd8ed1ab_0.conda + version: 0.20.0 - category: main dependencies: cffi: '' @@ -4452,13 +4670,13 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: 0f11bcdf9669a5ae0f39efd8c830209a - sha256: c0cfb2935d12f6300c65e8503eacdabe34d4b125ce0c3c87a0818e2d72c0c056 + md5: b66595fbda99771266f042f42c7457be + sha256: 6ca31e79eeee63ea33e5b18dd81c1bc202c43741b5f0de3bcd4409f9ffd93a95 manager: conda name: ukkonen optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39h7633fee_4.conda version: 1.0.1 - category: main dependencies: @@ -4479,25 +4697,25 @@ package: version: 1.2.3 - category: main dependencies: - cffi: '>=1.8' + cffi: '>=1.11' libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 + zstd: '>=1.5.5,<1.6.0a0' hash: - md5: 9e039b28b40db0335eecc3423ce8606d - sha256: fc581aafd0e9da266149ac16fe478ef5d9880cb90a73ca25cafb78a9f6ea5b89 + md5: 104b4a68c19978a94c73f83468debf8f + sha256: 5c749030f438da67fa3a6f0626287a6eedbcda52a0ec62f417328cd4ba5bcc36 manager: conda name: zstandard optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.19.0-py39hb9d737c_0.tar.bz2 - version: 0.19.0 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py39h6e5214e_0.conda + version: 0.22.0 - category: main dependencies: aiosignal: '>=1.1.2' - async-timeout: <5.0,>=4.0.0a3 + async-timeout: '>=4.0,<5.0' attrs: '>=17.3.0' - charset-normalizer: '>=2.0,<4.0' frozenlist: '>=1.1.1' libgcc-ng: '>=12' multidict: '>=4.5,<7.0' @@ -4505,28 +4723,95 @@ package: python_abi: 3.9.* *_cp39 yarl: '>=1.0,<2.0' hash: - md5: fe5f76b16e82145b87ac97bced358de2 - sha256: 882d08597436a0f6909f7b9306169e561c81669a14d4cd918eeb0e579c9a2c46 + md5: c94f6e40db7d4828430ac0d8efe6a3d7 + sha256: 9ef3be4aed65d22f29a03a1bbc5b36ecab14b279efbe729241270831ff5f17b4 manager: conda name: aiohttp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.8.5-py39hd1e30aa_0.conda - version: 3.8.5 + url: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.1-py39hd1e30aa_0.conda + version: 3.9.1 +- category: main + dependencies: + botocore: '>=1.11.3' + python: '>=3.7' + wrapt: '' + hash: + md5: d457b2661051b833852509d2dc0c93db + sha256: 15384560a8df2c752a1a09588b7fe9c31f9edf96e0a5a9d7c07c547a37b9e95c + manager: conda + name: aws-xray-sdk + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/aws-xray-sdk-2.12.1-pyhd8ed1ab_0.conda + version: 2.12.1 +- category: main + dependencies: + aws-c-auth: '>=0.7.8,<0.7.9.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-event-stream: '>=0.3.2,<0.3.3.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-c-mqtt: '>=0.9.10,<0.9.11.0a0' + aws-c-s3: '>=0.4.4,<0.4.5.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' + libgcc-ng: '>=12' + python: '>=3.9,<3.10.0a0' + python_abi: 3.9.* *_cp39 + s2n: '>=1.4.0,<1.4.1.0a0' + hash: + md5: 111dc2570e8dd2eebecbfd8be3bc4616 + sha256: 22fc0c664015c56fd5d96c93a5abd04a51b76b69b21981afd9ed521c72e64b73 + manager: conda + name: awscrt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/awscrt-0.19.19-py39hf0530f4_2.conda + version: 0.19.19 +- category: main + dependencies: + python: '>=3.6' + requests: '>=2.18.4' + six: '>=1.11.0' + typing-extensions: '>=4.0.1' + hash: + md5: 6e97f7d5387626f896515442002ac920 + sha256: 3f3ec0617e825bcabb70722ace9153dfdc02895aebb2179fc20b82eb30f79ec8 + manager: conda + name: azure-core + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.5-pyhd8ed1ab_0.conda + version: 1.29.5 - category: main dependencies: python: '>=3.7,<4.0' types-awscrt: '' typing_extensions: '>=4.1.0' hash: - md5: 656a8ea23e1f7195e402ee126cd0e036 - sha256: 8533293be957aa444689d17c297207d3a76a3d75308f917edc13dc1703055b6a + md5: 75715c2695eb5d1da023a79140e923cd + sha256: e539bb5b339fc2136b086ce084fbf7b8c8f694d0c6ac30db2565c426bcdf28da manager: conda name: botocore-stubs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.31.41-pyhd8ed1ab_0.conda - version: 1.31.41 + url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 +- category: main + dependencies: + msgpack-python: '>=0.5.2' + python: '>=3.7' + requests: '>=2.16.0' + hash: + md5: 174bd699bb5aa9e2622eb4b288276ff8 + sha256: aae7ab3a54989f9bf9273e4a17c911ba339a8b9354250bc11fb8eff2e3f4be60 + manager: conda + name: cachecontrol + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.13.1-pyhd8ed1ab_0.conda + version: 0.13.1 - category: main dependencies: clang-format: 16.0.3 default_h1cdf331_2 @@ -4557,6 +4842,38 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda version: 0.9.0 +- category: main + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.20,<2' + python: '>=3.9,<3.10.0a0' + python_abi: 3.9.* *_cp39 + hash: + md5: ed71ad3e30eb03da363fb797419cce98 + sha256: 7a85421667d97132c5d23575da63c2da850775c81832607e56bfd881c9750f3a + manager: conda + name: contourpy + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py39h7633fee_0.conda + version: 1.2.0 +- category: main + dependencies: + appdirs: '' + click: '>=5.1' + filelock: '' + python: '>=3.7' + requests: '>=2' + hash: + md5: c99ae3abf501990769047b4b40a98f17 + sha256: b71784b6c24d2320b2f796d074e75e7dd1be7b7fc0f719c5cf3a582270b368d6 + manager: conda + name: ensureconda + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/ensureconda-1.4.3-pyhd8ed1ab_0.tar.bz2 + version: 1.4.3 - category: main dependencies: flask: '>=0.9' @@ -4576,43 +4893,61 @@ package: python: '>=3.6' ukkonen: '' hash: - md5: 6fbde8d3bdd1874132a1b26a3554b22c - sha256: 5aece5a948e881e2450be73002e52cd27df089b6ea64416f7694304307f66bd2 + md5: 93c8f8ceb83827d88deeba796f07fba7 + sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f manager: conda name: identify optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda - version: 2.5.27 + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda + version: 2.5.33 - category: main dependencies: importlib_metadata: '' - python: 2.7.*|>=3.5 + python: '>=3.7' hash: - md5: 35f19fabdfd44c8b53889be95333848c - sha256: d497c6f3b064d3dd8b76f277ea8d6a507acfe8cb04e31811baf66d8c533b8c08 + md5: f351864256e291b24b5a3bedda184bff + sha256: c947f2a64e4f06c722973894afb8e26df3aa2212e2e742def3506ccbad42141b manager: conda name: jsonpickle optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonpickle-2.2.0-pyhd8ed1ab_0.tar.bz2 - version: 2.2.0 + url: https://conda.anaconda.org/conda-forge/noarch/jsonpickle-3.0.2-pyhd8ed1ab_1.conda + version: 3.0.2 - category: main dependencies: - jsonschema: '>=4.0.0,<4.18.0' - pathable: '>=0.4.1,<0.5.0' - python: '>=3.6' - pyyaml: '>=5.1' - typing_extensions: '>=4.3.0,<5.0.0' + attrs: '>=22.2.0' + importlib_resources: '>=1.4.0' + jsonschema-specifications: '>=2023.03.6' + pkgutil-resolve-name: '>=1.3.10' + python: '>=3.8' + referencing: '>=0.28.4' + rpds-py: '>=0.7.1' hash: - md5: eff09facc908d5619097edd090678347 - sha256: 9ed0cbf1fec505c4ed2238453b42c964f8f85baa30490daeb84dbf5afd65c0b1 + md5: 1116d79def5268414fb0917520b2bbf1 + sha256: 77aae609097d06deedb8ef8407a44b23d5fef95962ba6fe1c959ac7bd6195296 manager: conda - name: jsonschema-spec + name: jsonschema optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-spec-0.1.4-pyhd8ed1ab_0.conda - version: 0.1.4 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda + version: 4.20.0 +- category: main + dependencies: + pathable: '>=0.4.1,<0.5.0' + python: '>=3.8.0' + pyyaml: '>=5.1' + referencing: '>=0.28.0,<0.31.0' + requests: '>=2.31.0,<3.0.0' + hash: + md5: 397d8d6ea406285f184534976f5bc9ae + sha256: 37d650a156a086a113be9ae917ba9737000be54e8939edd25e8d9f6fdd208bf2 + manager: conda + name: jsonschema-path + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-path-0.3.2-pyhd8ed1ab_0.conda + version: 0.3.2 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4629,47 +4964,19 @@ package: version: 0.0.0.20190110_28_ga81397fc4 - category: main dependencies: - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - importlib-resources: '>=3.2.0' - kiwisolver: '>=1.0.1' - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.20.3,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1' - python: '>=3.9,<3.10.0a0' - python-dateutil: '>=2.7' - python_abi: 3.9.* *_cp39 - tk: '>=8.6.12,<8.7.0a0' + cryptography: <44,>=0.6 + pyjwt: <3,>=1.0.0 + python: '>=3.6' + requests: <3,>=2.0.0 hash: - md5: f2a931db797bb58bd335f4a857b4c898 - sha256: 34f8db992c68bee53fb6f0212707503ce197d13fadc231dbc37a99f31f72879a + md5: 9d9b0ef23f5dbe0d612ca037b9bfb410 + sha256: e0eb5606b4a164964d663d7a215ac9cd18db1ce1eca544aa61348e0a2bda94a9 manager: conda - name: matplotlib-base + name: msal optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py39he190548_0.conda - version: 3.7.1 -- category: main - dependencies: - attrs: '>=19.2.0' - jsonschema: '>=4.0.0,<4.18.0' - python: '>=3.7' - rfc3339-validator: '' - hash: - md5: 6294c4a75fdeeca454e99abbea3f250a - sha256: 6b6fff6441e2673a822793776217f1c07d595ad7a73e7b631c7aeb8ac6663041 - manager: conda - name: openapi-schema-validator - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.4.4-pyhd8ed1ab_0.conda - version: 0.4.4 + url: https://conda.anaconda.org/conda-forge/noarch/msal-1.26.0-pyhd8ed1ab_0.conda + version: 1.26.0 - category: main dependencies: alsa-lib: '>=1.2.9,<1.2.10.0a0' @@ -4700,6 +5007,25 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/openjdk-20.0.0-h8e330f5_0.conda version: 20.0.0 +- category: main + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.9,<3.10.0a0' + python-dateutil: '>=2.8.1' + python-tzdata: '>=2022a' + python_abi: 3.9.* *_cp39 + pytz: '>=2020.1' + hash: + md5: dcfd2f15c6f8f0bbf234412b18a2a5d0 + sha256: 3344059c6df1a07e9e5824990c53f8ac4ee7a19a209e33f0009b5af266844d2b + manager: conda + name: pandas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py39hddac248_0.conda + version: 2.1.4 - category: main dependencies: cairo: '>=1.16.0,<2.0a0' @@ -4727,27 +5053,42 @@ package: pynacl: '>=1.5' python: '>=3.6' hash: - md5: 8d4563992b27cdb8e673d1ca16962c9d - sha256: 9139c13cb7ea5729af862db5fb0523daa5900b9b4fa36637cd7f9c01be665f80 + md5: a5e792523b028b06d7ce6e65a6cd4a33 + sha256: 2e66359261954a79b66858c30e69ea6dd4380bf8bd733940527386b25e31dd13 manager: conda name: paramiko optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.3.1-pyhd8ed1ab_0.conda - version: 3.3.1 + url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda + version: 3.4.0 - category: main dependencies: - cryptography: '>=38.0.0,<42,!=40.0.0,!=40.0.1' + annotated-types: '>=0.4.0' + pydantic-core: 2.14.6 + python: '>=3.7' + typing-extensions: '>=4.6.1' + hash: + md5: 3569001fd8b37e542aaefdf5de124e19 + sha256: 07ec778cbf17737b740f0547fb5cba91a7bff52945fe637287458e4119c58ffe + manager: conda + name: pydantic + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.5.3-pyhd8ed1ab_0.conda + version: 2.5.3 +- category: main + dependencies: + cryptography: '>=38.0.0,<41' python: '>=3.6' hash: - md5: 34f7d568bf59d18e3fef8c405cbece21 - sha256: 4daea3dc896987cc1334956fccfc0ed738663a84ad0c1d3f576a7a7936091534 + md5: 0b34aa3ab7e7ccb1765a03dd9ed29938 + sha256: 458428cb867f70f2af2a4ed59d382291ea3eb3f10490196070a15d1d71d5432a manager: conda name: pyopenssl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda - version: 23.2.0 + url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.1.1-pyhd8ed1ab_0.conda + version: 23.1.1 - category: main dependencies: cryptography: '' @@ -4764,6 +5105,36 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/python-jose-3.3.0-pyh6c4a22f_1.tar.bz2 version: 3.3.0 +- category: main + dependencies: + python: '>=3.7' + pyyaml: '' + requests: '>=2.30.0,<3.0' + types-pyyaml: '' + typing_extensions: '' + urllib3: '>=1.25.10,<3.0' + hash: + md5: b1b80aaa77d5e83183cd0c9e9025b1fa + sha256: 35a1cc20beca329bfa2b17feeb5ca66a2741bdccf39621dfe386f48206e73d67 + manager: conda + name: responses + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/responses-0.24.1-pyhd8ed1ab_0.conda + version: 0.24.1 +- category: main + dependencies: + botocore: '>=1.33.2,<2.0a.0' + python: '>=3.8' + hash: + md5: 2d52125a7fe49248ce5e883fed6c935a + sha256: 5f1fccbbc0460971f12dda7ab0465d8f6037486042d156b611881e57d218ce95 + manager: conda + name: s3transfer + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.0-pyhd8ed1ab_0.conda + version: 0.10.0 - category: main dependencies: attrs: '' @@ -4786,13 +5157,13 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* *_cp39 hash: - md5: cfb68a22e2d9108634a08a8a3b19d1b6 - sha256: db76e25d0c1cad3ca6339fd4d09c9cd03dcea7072b302c6eaa4123a358e98a78 + md5: 0e6f3ef2dd562ed33d2a18d9c6f78d88 + sha256: efff009fd24eca4cf1ecdb5010d605db11078f08be7d046d8d23a2e0e63e5015 manager: conda name: secretstorage optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py39hf3d152e_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py39hf3d152e_2.conda version: 3.3.3 - category: main dependencies: @@ -4810,19 +5181,58 @@ package: version: 3.3.1 - category: main dependencies: - distlib: <1,>=0.3.7 - filelock: <4,>=3.12.2 - platformdirs: <4,>=3.9.1 - python: '>=3.8' + awscrt: '>=0.19.18,<=0.19.19' + colorama: '>=0.2.5,<0.4.7' + cryptography: '>=3.3.2,<=40.0.2' + distro: '>=1.5.0,<1.9.0' + docutils: '>=0.10,<0.20' + jmespath: '>=0.7.1,<1.1.0' + prompt_toolkit: '>=3.0.24,<3.0.39' + pyopenssl: <23.2 + python: '>=3.9,<3.10.0a0' + python-dateutil: '>=2.1,<3.0.0' + python_abi: 3.9.* *_cp39 + ruamel.yaml: '>=0.15.0,<=0.17.21' + ruamel.yaml.clib: '>=0.2.0,<=0.2.7' + urllib3: '>=1.25.4,<1.27' hash: - md5: c3feaf947264a59a125e8c26e98c3c5a - sha256: 85c96449202ca87ec12783d8675b3655b4cd7b7afe49f2dc37d743adb0ed177f + md5: 602c85ef4db55f9b4b34c5bb6aaa2795 + sha256: 11a001f8ac7000eaaa9f5c3e6d9978abf263f5ad8487a15ef8676bdc1fc1a7e7 manager: conda - name: virtualenv + name: awscli optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda - version: 20.24.4 + url: https://conda.anaconda.org/conda-forge/linux-64/awscli-2.15.6-py39hf3d152e_0.conda + version: 2.15.6 +- category: main + dependencies: + botocore: '>=1.34.11,<1.35.0' + jmespath: '>=0.7.1,<2.0.0' + python: '>=3.8' + s3transfer: '>=0.10.0,<0.11.0' + hash: + md5: b1256264fc531fca35aabab7d517438a + sha256: b4d3415b4beee1623c02b7ddc593ae7ca5c5843c943424a73b7648e05858e008 + manager: conda + name: boto3 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 +- category: main + dependencies: + cachecontrol: 0.13.1 pyhd8ed1ab_0 + filelock: '>=3.8.0' + python: '>=3.7' + hash: + md5: 8c4781ca0893cff3a64423954ce234a1 + sha256: 7fd3cd4a667da284ae3aad9b8cb4d592099bc02ed6566cbae00bd8c0b0604e85 + manager: conda + name: cachecontrol-with-filecache + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.13.1-pyhd8ed1ab_0.conda + version: 0.13.1 - category: main dependencies: conda-package-streaming: '>=0.9.0' @@ -4837,6 +5247,24 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda version: 2.2.0 +- category: main + dependencies: + packaging: '>=14.0' + paramiko: '>=2.4.3' + python: '>=3.7' + pywin32-on-windows: '' + requests: '>=2.26.0' + urllib3: '>=1.26.0' + websocket-client: '>=0.32.0' + hash: + md5: aec5f308cb9055e83c59afecd5fcb58a + sha256: b9bf5990dc968123e5817096daddd2105857cfd4c5b94c0937d929bc74fc7a31 + manager: conda + name: docker-py + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/docker-py-7.0.0-pyhd8ed1ab_0.conda + version: 7.0.0 - category: main dependencies: atk-1.0: '>=2.36.0' @@ -4879,14 +5307,14 @@ package: python_abi: 3.9.* *_cp39 secretstorage: '>=3.2' hash: - md5: bca055aa9d1d8730c1a93a9ad138456a - sha256: d431310c2195bb77a6fc5184b3914b9018b7ed31b27d0faa2296dd681fe229e3 + md5: 1426c4f9994cb7e55859b44b98bc7b3e + sha256: a7538a914feb54dc3e7ee46431af5f0a40e668b29224998e6d3be044a1a7606e manager: conda name: keyring optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/keyring-24.2.0-py39hf3d152e_0.conda - version: 24.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/keyring-24.3.0-py39hf3d152e_0.conda + version: 24.3.0 - category: main dependencies: cairo: '>=1.16.0,<2.0a0' @@ -4907,372 +5335,32 @@ package: version: 2.56.0 - category: main dependencies: - importlib_resources: '>=5.8.0,<6.0.0' - jsonschema: '>=4.0.0,<4.18.0' - jsonschema-spec: '>=0.1.1,<0.2.0' - lazy-object-proxy: '>=1.7.1,<2.0.0' - openapi-schema-validator: '>=0.4.2,<0.5' - python: '>=3.7' - typing_extensions: '' - hash: - md5: 365a6ba8516ec76591f32918895502d5 - sha256: 6364d948b9215a15a0482eafab725d9acdad6d03c744501c8fdedfac0d8e12ff - manager: conda - name: openapi-spec-validator - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.5.7-pyhd8ed1ab_0.conda - version: 0.5.7 -- category: main - dependencies: - cfgv: '>=2.0.0' - identify: '>=1.0.0' - nodeenv: '>=0.11.1' - python: '>=3.8' - pyyaml: '>=5.1' - virtualenv: '>=20.10.0' - hash: - md5: f0fe759dc1dc02722c15cfb5faa1172b - sha256: 7adddcb9b5651fe5ed08a8438f2c967ac126c8b3fa854376a9a6f97511810c6a - manager: conda - name: pre-commit - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_0.conda - version: 3.4.0 -- category: main - dependencies: - __unix: '' - openjdk: '>=8' - hash: - md5: a46fac25dff2221c873bfceab88fcb47 - sha256: 08012e6a1ab95c56b86fe76ca76d236db8aa60f6cb4a47db6ef307671aeb2c1b - manager: conda - name: sbt - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/sbt-1.9.4-h707e725_0.conda - version: 1.9.4 -- category: main - dependencies: - brotlipy: '>=0.6.0' - certifi: '' - cryptography: '>=1.3.4' - idna: '>=2.0.0' - pyopenssl: '>=0.14' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - python: <4.0 - hash: - md5: 27db656619a55d727eaf5a6ece3d2fd6 - sha256: 213bdf6c3a5d721fa83b45d527d3ecd340f9547c0d6bbd0b8d9d746ec9a1fb4b - manager: conda - name: urllib3 - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.15-pyhd8ed1ab_0.conda - version: 1.26.15 -- category: main - dependencies: - jmespath: '>=0.7.1,<2.0.0' - python: '>=3.7' - python-dateutil: '>=2.1,<3.0.0' - urllib3: '>=1.25.4,<1.27' - hash: - md5: 157c6bb045111f1b4f68e16df9251e7e - sha256: ab65ee4c7f97d8072f25891c8329ad54dece85fefc5053e31266275ea6db637c - manager: conda - name: botocore - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.31.41-pyhd8ed1ab_0.conda - version: 1.31.41 -- category: main - dependencies: - cairo: '>=1.16.0,<2.0a0' - expat: '' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' + certifi: '>=2020.06.20' + contourpy: '>=1.0.1' + cycler: '>=0.10' + fonttools: '>=4.22.0' freetype: '>=2.12.1,<3.0a0' - gdk-pixbuf: '>=2.42.10,<3.0a0' - gtk2: '' - gts: '>=0.7.6,<0.8.0a0' - libexpat: '>=2.5.0,<3.0a0' + importlib-resources: '>=3.2.0' + kiwisolver: '>=1.3.1' libgcc-ng: '>=12' - libgd: '>=2.3.3,<2.4.0a0' - libglib: '>=2.76.2,<3.0a0' - librsvg: '>=2.56.0,<3.0a0' libstdcxx-ng: '>=12' - libtool: '' - libwebp-base: '>=1.3.0,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pango: '>=1.50.14,<2.0a0' - zlib: '' - hash: - md5: 597e2d0e1c6bc2e4457714ff479fe142 - sha256: 4bfb42de2d28406666ef6729169cae3f49c216c5ebd9f34afa40223755e2aaf8 - manager: conda - name: graphviz - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.0.5-h28d9a01_0.conda - version: 8.0.5 -- category: main - dependencies: - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - idna: '>=2.5,<4' - python: '>=3.7' - urllib3: '>=1.21.1,<3' - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - manager: conda - name: requests - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - version: 2.31.0 -- category: main - dependencies: - botocore: '>=1.11.3' - python: '>=3.4' - wrapt: '' - hash: - md5: a9f8851a7aad0fa6ec843b1beb95decf - sha256: ad37f3f8a6653fb91354716adec29dfb9f5917b7aa06d77f33af8ea7947eb116 - manager: conda - name: aws-xray-sdk - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/aws-xray-sdk-2.12.0-pyhd8ed1ab_0.conda - version: 2.12.0 -- category: main - dependencies: - python: '>=3.6' - requests: '>=2.18.4' - six: '>=1.11.0' - typing-extensions: '>=4.0.1' - hash: - md5: d336f70469313f6c1eaf3c645b071961 - sha256: 826fb6bf9e20fd7afa4ec971ad0c343cc39b7bd872709d3c4d11a0c397006ed6 - manager: conda - name: azure-core - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.3-pyhd8ed1ab_0.conda - version: 1.29.3 -- category: main - dependencies: - msgpack-python: '>=0.5.2' - python: '>=3.7' - requests: '>=2.16.0' - hash: - md5: 174bd699bb5aa9e2622eb4b288276ff8 - sha256: aae7ab3a54989f9bf9273e4a17c911ba339a8b9354250bc11fb8eff2e3f4be60 - manager: conda - name: cachecontrol - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.13.1-pyhd8ed1ab_0.conda - version: 0.13.1 -- category: main - dependencies: - boltons: '>=23.0.0' - conda-package-handling: '>=1.3.0' - jsonpatch: '>=1.32' - packaging: '>=23.0' - pluggy: '>=1.0.0' - pycosat: '>=0.6.3' - pyopenssl: '>=16.2.0' + numpy: '>=1.22.4,<2.0a0' + packaging: '>=20.0' + pillow: '>=8' + pyparsing: '>=2.3.1' python: '>=3.9,<3.10.0a0' + python-dateutil: '>=2.7' python_abi: 3.9.* *_cp39 - requests: '>=2.27.0,<3' - ruamel.yaml: '>=0.11.14,<0.18' - setuptools: '>=60.0.0' - toolz: '>=0.8.1' - tqdm: '>=4' + tk: '>=8.6.13,<8.7.0a0' hash: - md5: 28f9479dd8a71fade399e42d67d1506d - sha256: 017e565c58e23da12aba5217bb068170acec66e387143cff79b2208d223f1fd6 + md5: 6085411aa2f0b2b801d3b46e1d3b83c5 + sha256: f5e1275e1e7f644d5c91780c08f9868153b8b1a00703e7b03f4b171be02879e1 manager: conda - name: conda + name: matplotlib-base optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/conda-23.7.3-py39hf3d152e_0.conda - version: 23.7.3 -- category: main - dependencies: - packaging: '>=14.0' - paramiko: '>=2.4.3' - python: '>=3.7' - pywin32-on-windows: '' - requests: '>=2.26.0' - urllib3: '>=1.26.0' - websocket-client: '>=0.32.0' - hash: - md5: c95d23d8bae7e21491868cc7772d7c73 - sha256: 7c3031602e92fd7682302ef98a45bdf7374d48a849cdd3900b7c68a32d162177 - manager: conda - name: docker-py - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/docker-py-6.1.3-pyhd8ed1ab_0.conda - version: 6.1.3 -- category: main - dependencies: - appdirs: '' - click: '>=5.1' - filelock: '' - python: '>=3.7' - requests: '>=2' - hash: - md5: c99ae3abf501990769047b4b40a98f17 - sha256: b71784b6c24d2320b2f796d074e75e7dd1be7b7fc0f719c5cf3a582270b368d6 - manager: conda - name: ensureconda - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/ensureconda-1.4.3-pyhd8ed1ab_0.tar.bz2 - version: 1.4.3 -- category: main - dependencies: - cryptography: '>=0.6,<44' - pyjwt: '>=1.0.0,<3' - python: '>=3.6' - requests: '>=2.0.0,<3' - hash: - md5: 4af1ca41814694c1028c4f1b1f88c38f - sha256: 50f80fe167d5ca5be572174f3fcad4f4cef225dcf1feccc88fbaf3d661fe15c9 - manager: conda - name: msal - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/msal-1.23.0-pyhd8ed1ab_0.conda - version: 1.23.0 -- category: main - dependencies: - graphviz: '>=2.46.1' - python: '>=3' - hash: - md5: 196447bc6fd769c3eb2d51de1aa866a5 - sha256: 55e25bf761438b6b52e67ed06d3e5575445177a58636e873a9899aa7fd9c8585 - manager: conda - name: python-graphviz - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.1-pyh22cad53_0.tar.bz2 - version: 0.20.1 -- category: main - dependencies: - python: '>=3.7' - pyyaml: '' - requests: '>=2.22.0,<3.0' - types-pyyaml: '' - typing_extensions: '' - urllib3: '>=1.25.10' - hash: - md5: bf15c93720dfea117aaea3155cbebce5 - sha256: c64db4a71de87e17fbcbd0b3af2186ab25d65428bb565bd7d070850324096f3b - manager: conda - name: responses - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/responses-0.23.1-pyhd8ed1ab_0.conda - version: 0.23.1 -- category: main - dependencies: - botocore: '>=1.12.36,<2.0a.0' - python: '>=3.7' - hash: - md5: f57096b122c78f7d8bd6885f52db1077 - sha256: 636453288a2436016235b86ec9bdf6c965aabe2114a68c51809874014255db71 - manager: conda - name: s3transfer - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.6.2-pyhd8ed1ab_0.conda - version: 0.6.2 -- category: main - dependencies: - botocore: 1.31.41 - colorama: '>=0.2.5,<0.4.5' - docutils: '>=0.10,<0.17' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - pyyaml: '>=3.10,<6.1' - rsa: '>=3.1.2,<4.8' - s3transfer: '>=0.6.0,<0.7.0' - hash: - md5: 03c2e4dfd567f3efefe454fd6c1058b2 - sha256: b5c0e89a663c283807f89f12ed19f78da7fb9620a9f9dcb9da35e2bf1b13ee2f - manager: conda - name: awscli - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/awscli-1.29.41-py39hf3d152e_0.conda - version: 1.29.41 -- category: main - dependencies: - botocore: '>=1.31.41,<1.32.0' - jmespath: '>=0.7.1,<2.0.0' - python: '>=3.7' - s3transfer: '>=0.6.0,<0.7.0' - hash: - md5: 904d83242795391e42132fba9ce95884 - sha256: 1766d30554de4c2cda01284620c69e9306d14329bfd1b60324c25668dfa36a18 - manager: conda - name: boto3 - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.28.41-pyhd8ed1ab_0.conda - version: 1.28.41 -- category: main - dependencies: - cachecontrol: 0.13.1 pyhd8ed1ab_0 - filelock: '>=3.8.0' - python: '>=3.7' - hash: - md5: 8c4781ca0893cff3a64423954ce234a1 - sha256: 7fd3cd4a667da284ae3aad9b8cb4d592099bc02ed6566cbae00bd8c0b0604e85 - manager: conda - name: cachecontrol-with-filecache - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.13.1-pyhd8ed1ab_0.conda - version: 0.13.1 -- category: main - dependencies: - colorama: '' - conda: '' - networkx: '' - python: '>=3.6' - hash: - md5: 184216409957e082712d750862782903 - sha256: 54e9cf114ca4eaeda91b5bb11a09d4391ba4be8a4fb2911259fc7dc2ec636054 - manager: conda - name: conda-tree - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/conda-tree-1.1.0-pyhd8ed1ab_2.conda - version: 1.1.0 -- category: main - dependencies: - __unix: '' - conda: '>=4.6' - conda-standalone: '' - jinja2: '' - pillow: '>=3.1' - python: '>=3.7' - ruamel.yaml: '>=0.11.14,<0.18' - hash: - md5: 874c9c92cfcb27369d5620eb65f9ec9c - sha256: cad7b6bdf433da141dabcbb7c138e8665db20382e000ff9629b6d0c9141528b0 - manager: conda - name: constructor - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/constructor-3.4.5-pyh55f8243_0.conda - version: 3.4.5 + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py39he9076e7_0.conda + version: 3.8.2 - category: main dependencies: msal: '>=0.4.1,<2.0' @@ -5289,51 +5377,120 @@ package: version: 1.0.0 - category: main dependencies: - boto3: '>=1.19.5,<2' - jsonschema: '>=3.2,<5' - pydantic: ~=1.10.2 - python: '>=3.7' - typing_extensions: '>=4.4.0,<5' + jsonschema: '>=4.19.1,<5.0.0a0' + jsonschema-specifications: '>=2023.5.2,<2024.0.0' + python: '>=3.8' + rfc3339-validator: '' hash: - md5: 2f1c7e055a216b95454484d831cc60b3 - sha256: ad418000db6c5105416a87be77026944450cd5b922dd46da0d39782fad35ba33 + md5: 86794cb397bb1b311da59f9ac232b0c8 + sha256: 184ab5d662741d549e5bdc3ea75846ed9a5d0ae2072d9b970d92ab0e4fbe6145 + manager: conda + name: openapi-schema-validator + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.6.2-pyhd8ed1ab_0.conda + version: 0.6.2 +- category: main + dependencies: + cfgv: '>=2.0.0' + identify: '>=1.0.0' + nodeenv: '>=0.11.1' + python: '>=3.9' + pyyaml: '>=5.1' + virtualenv: '>=20.10.0' + hash: + md5: 473a7cfca197da0a10cff3f6dded7d4b + sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 + manager: conda + name: pre-commit + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda + version: 3.6.0 +- category: main + dependencies: + __unix: '' + openjdk: '>=8' + hash: + md5: b6f6329c1a8a1efaaf16024e545335f5 + sha256: f5588175723814ad220d6dad75771d7139c293df802ce871ab2b89a629250013 + manager: conda + name: sbt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/sbt-1.9.7-hd8ed1ab_0.conda + version: 1.9.7 +- category: main + dependencies: + boto3: '>=1.19.5' + jsonschema: <5,>=3.2 + pydantic: '>=1.8,<3' + python: '>=3.7,<4.0' + typing-extensions: <5,>=4.4 + hash: + md5: 9fabf343ed3cdb5803480768e6338826 + sha256: 6cdad8582e270b88147295e9ec4817bdcda14212098efa77165a96870a31bbf4 manager: conda name: aws-sam-translator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.73.0-pyhd8ed1ab_0.conda - version: 1.73.0 + url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.82.0-pyhd8ed1ab_0.conda + version: 1.82.0 - category: main dependencies: - azure-core: '>=1.11.0,<2.0.0' + azure-core: <2.0.0,>=1.23.0 cryptography: '>=2.5' - msal: '>=1.12.0,<2.0.0' - msal_extensions: '>=0.3.0,<2.0.0' + msal: <2.0.0,>=1.24.0 + msal_extensions: <2.0.0,>=0.3.0 python: '>=3.7' - six: '>=1.12' hash: - md5: 221a093ddca5e5abf2090a68dd964266 - sha256: af18f4cc9305c849e5ebbaa5cab69bc546c1d8a67accaf2e7bdeb39ab6f75f6f + md5: d1ef208ae2a355e5bb9cdce337644ce9 + sha256: a7a80ce603b0b2af0670e676b0ce96cc3fddd7c59f8f2c4d5767f5cfda7a74e9 manager: conda name: azure-identity optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/azure-identity-1.12.0-pyhd8ed1ab_0.tar.bz2 - version: 1.12.0 + url: https://conda.anaconda.org/conda-forge/noarch/azure-identity-1.15.0-pyhd8ed1ab_0.conda + version: 1.15.0 - category: main dependencies: boto3: '' python: '' typing_extensions: '' hash: - md5: 772310fe036b21f322cfafff4e3c8169 - sha256: 8695b9bc5fcab93aed3b1aa5bda8f3922340bc10a14088fa623470db4c9a558d + md5: 8e4b38b9dfc865ffb06a2bf2f3719d91 + sha256: e8d31daecb364f893495430612721bb7b8f240e0834be5d1226810ace22cde68 manager: conda name: boto3-stubs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/boto3-stubs-1.28.41-pyhd8ed1ab_0.conda - version: 1.28.41 + url: https://conda.anaconda.org/conda-forge/noarch/boto3-stubs-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 +- category: main + dependencies: + archspec: '' + boltons: '>=23.0.0' + conda-package-handling: '>=2.2.0' + jsonpatch: '>=1.32' + packaging: '>=23.0' + pluggy: '>=1.0.0' + pycosat: '>=0.6.3' + pyopenssl: '>=16.2.0' + python: '>=3.9,<3.10.0a0' + python_abi: 3.9.* *_cp39 + requests: '>=2.27.0,<3' + ruamel.yaml: '>=0.11.14,<0.18' + setuptools: '>=60.0.0' + tqdm: '>=4' + hash: + md5: c1d2d9bea2ab80b9e7937f72fec646cd + sha256: 2da2e5617696f1ba826d9653f21ed29e63aea2d4b3b3abd0c0d4617edab37ee4 + manager: conda + name: conda + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-23.9.0-py39hf3d152e_2.conda + version: 23.9.0 - category: main dependencies: cachecontrol-with-filecache: '>=0.12.9' @@ -5370,32 +5527,79 @@ package: version: 1.4.0 - category: main dependencies: - boto3: '' - python: '>=3.6' - typing-extensions: '' + cairo: '>=1.16.0,<2.0a0' + expat: '' + fontconfig: '>=2.14.2,<3.0a0' + fonts-conda-ecosystem: '' + freetype: '>=2.12.1,<3.0a0' + gdk-pixbuf: '>=2.42.10,<3.0a0' + gtk2: '' + gts: '>=0.7.6,<0.8.0a0' + libexpat: '>=2.5.0,<3.0a0' + libgcc-ng: '>=12' + libgd: '>=2.3.3,<2.4.0a0' + libglib: '>=2.76.2,<3.0a0' + librsvg: '>=2.56.0,<3.0a0' + libstdcxx-ng: '>=12' + libtool: '' + libwebp-base: '>=1.3.0,<2.0a0' + libzlib: '>=1.2.13,<1.3.0a0' + pango: '>=1.50.14,<2.0a0' + zlib: '' hash: - md5: 7654bffc34df00bef7662f5aaede6024 - sha256: 0bb7792dbb38eaf3a75fe5ae547aaf62197b140feb5a624e80adc028f9fbc864 + md5: 597e2d0e1c6bc2e4457714ff479fe142 + sha256: 4bfb42de2d28406666ef6729169cae3f49c216c5ebd9f34afa40223755e2aaf8 manager: conda - name: mypy-boto3-s3 + name: graphviz optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/mypy-boto3-s3-1.28.36-pyhd8ed1ab_0.conda - version: 1.28.36 + url: https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.0.5-h28d9a01_0.conda + version: 8.0.5 - category: main dependencies: boto3: '' python: '>=3.6' typing-extensions: '' hash: - md5: 8678482bae631d4af00874831dbe4798 - sha256: 72f952beb3209ea9cfb20011c26e6239c38b14fdafc216fa773eec4b644db326 + md5: 768ff0d711180b901b1490ebe7010ada + sha256: 9482dd403e24f5e5c155624de7d89f5521a97e8130f0a014899b12486a331a85 + manager: conda + name: mypy-boto3-s3 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/mypy-boto3-s3-1.34.0-pyhd8ed1ab_0.conda + version: 1.34.0 +- category: main + dependencies: + boto3: '' + python: '>=3.6' + typing-extensions: '' + hash: + md5: a810296f4cdd969085c1c3d78c846588 + sha256: 3975c31a2c88ff9925922537bb653f84a1c91ed5152043788bc8cc49d541951d manager: conda name: mypy_boto3_ec2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/mypy_boto3_ec2-1.28.41-pyhd8ed1ab_0.conda - version: 1.28.41 + url: https://conda.anaconda.org/conda-forge/noarch/mypy_boto3_ec2-1.34.4-pyhd8ed1ab_0.conda + version: 1.34.4 +- category: main + dependencies: + importlib_resources: '>=5.8,<7.0' + jsonschema: '>=4.18.0,<5.0.0' + jsonschema-path: '>=0.3.1,<0.4.0' + lazy-object-proxy: '>=1.7.1,<2.0.0' + openapi-schema-validator: '>=0.6.0,<0.7.0' + python: '>=3.8.0' + hash: + md5: 01d3b50ae6ec011c99b043388fc3148d + sha256: b3aff38febb575647f1b5ad246dc4a9f221e3f712027a71be6e2554c3fe44220 + manager: conda + name: openapi-spec-validator + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.7.1-pyhd8ed1ab_0.conda + version: 0.7.1 - category: main dependencies: boto3: '' @@ -5412,26 +5616,72 @@ package: version: 0.4.2 - category: main dependencies: - aws-sam-translator: '>=1.73.0' + aws-sam-translator: '>=1.82.0' jschema-to-python: '>=1.2.3,<1.3.dev0' jsonpatch: '' - jsonschema: '>=3.0,<4.18' + jsonschema: '>=3.0,<5' junit-xml: '>=1.9,<2.dev0' networkx: '>=2.4,<4' python: '>=3.7,<4.0' pyyaml: '>5.4' - regex: '' + regex: '>=2021.7.1' sarif-om: '>=1.0.4,<1.1.dev0' sympy: '>=1.0.0' hash: - md5: 7e1bb14c96e20a83a9d2170f7cf99b35 - sha256: c9a71f90673966eb5d449993e134ac74ef8cdb3e1e5a7fe85f77fbfca768369f + md5: 6bf6c385031287e86a5821f57544fc12 + sha256: deed7d4700694a25d440816d13de89468fe92dfc87ba506f3fee72b5d1131c75 manager: conda name: cfn-lint optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cfn-lint-0.79.9-pyhd8ed1ab_0.conda - version: 0.79.9 + url: https://conda.anaconda.org/conda-forge/noarch/cfn-lint-0.83.6-pyhd8ed1ab_0.conda + version: 0.83.6 +- category: main + dependencies: + colorama: '' + conda: '' + networkx: '' + python: '>=3.6' + hash: + md5: 184216409957e082712d750862782903 + sha256: 54e9cf114ca4eaeda91b5bb11a09d4391ba4be8a4fb2911259fc7dc2ec636054 + manager: conda + name: conda-tree + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/conda-tree-1.1.0-pyhd8ed1ab_2.conda + version: 1.1.0 +- category: main + dependencies: + __unix: '' + conda: '>=4.6' + conda-standalone: '' + jinja2: '' + pillow: '>=3.1' + python: '>=3.7' + ruamel.yaml: '>=0.11.14,<0.18' + hash: + md5: bece1550cd8ce528b234f41c85786ef8 + sha256: a4304eff880a3150e027f8af8d158cc9bf6e6c8444d2affda4e2b17125f44a85 + manager: conda + name: constructor + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/constructor-3.5.0-pyhe4f9e05_0.conda + version: 3.5.0 +- category: main + dependencies: + graphviz: '>=2.46.1' + python: '>=3' + hash: + md5: 196447bc6fd769c3eb2d51de1aa866a5 + sha256: 55e25bf761438b6b52e67ed06d3e5575445177a58636e873a9899aa7fd9c8585 + manager: conda + name: python-graphviz + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.1-pyh22cad53_0.tar.bz2 + version: 0.20.1 - category: main dependencies: aws-xray-sdk: '!=0.96,>=0.93' @@ -5461,14 +5711,14 @@ package: werkzeug: '>=0.5,!=2.2.0,!=2.2.1' xmltodict: '' hash: - md5: 779af6a36cd3a8f7260a074462e5e587 - sha256: d5128b843ac0f338f955bb1a93c3565be87b6a5c241300ee2a34fcd4509f7390 + md5: 9447c344fde58f458a55b05729ae74aa + sha256: f0586fd89bcc4e7df9cd12e66627473bed9b4bc33814b01f48e6059628af2f6b manager: conda name: moto optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/moto-4.2.2-pyhd8ed1ab_0.conda - version: 4.2.2 + url: https://conda.anaconda.org/conda-forge/noarch/moto-4.2.12-pyhd8ed1ab_0.conda + version: 4.2.12 - category: main dependencies: livereload: '>=2.3.0' @@ -5537,19 +5787,19 @@ package: version: '4.1' - category: main dependencies: - docutils: <0.19 - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' - sphinx: '>=1.6,<8' + docutils: <0.21 + python: '>=3.6' + sphinx: '>=5,<8' sphinxcontrib-jquery: '>=4,<5' hash: - md5: a615c369167e508293d8409973b34863 - sha256: 1288aac6167e320b576d89855262f05b1903e446c3dfc92cc67b12b39fb62502 + md5: baf6d9a33df1a789ca55e3b404c7ea28 + sha256: 8545c806d03092fd0236db6663c88036eab2dc99e34c91cd36c0704db03b148a manager: conda name: sphinx_rtd_theme optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/sphinx_rtd_theme-1.3.0-pyha770c72_0.conda - version: 1.3.0 + url: https://conda.anaconda.org/conda-forge/noarch/sphinx_rtd_theme-2.0.0-pyha770c72_0.conda + version: 2.0.0 - category: main dependencies: python: '>=3.9' @@ -5566,32 +5816,32 @@ package: - category: main dependencies: alabaster: '>=0.7,<0.8' - babel: '>=1.3' - colorama: '>=0.3.5' - docutils: '>=0.14,<0.20' - imagesize: '' - importlib-metadata: '>=4.4' - jinja2: '>=2.3' - packaging: '' - pygments: '>=2.0' - python: '>=3.7' - requests: '>=2.5.0' - snowballstemmer: '>=1.1' + babel: '>=2.9' + colorama: '>=0.4.5' + docutils: '>=0.18.1,<0.21' + imagesize: '>=1.3' + importlib-metadata: '>=4.8' + jinja2: '>=3.0' + packaging: '>=21.0' + pygments: '>=2.14' + python: '>=3.9' + requests: '>=2.25.0' + snowballstemmer: '>=2.0' sphinxcontrib-applehelp: '' sphinxcontrib-devhelp: '' sphinxcontrib-htmlhelp: '>=2.0.0' sphinxcontrib-jsmath: '' sphinxcontrib-qthelp: '' - sphinxcontrib-serializinghtml: '>=1.1.5' + sphinxcontrib-serializinghtml: '>=1.1.9' hash: - md5: cd1129e88f6278787212624e1b7a8001 - sha256: 9d614432deff37f90ba406855fd9a21799ef09ab43ec27f5af12ac810fcd1dd1 + md5: bbfd1120d1824d2d073bc65935f0e4c0 + sha256: 665d1fe6d20c6cc672ff20e6ebb405860f878b487d3d8d86a5952733fb7bbc42 manager: conda name: sphinx optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/sphinx-5.1.1-pyhd8ed1ab_1.tar.bz2 - version: 5.1.1 + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda + version: 7.2.6 - category: main dependencies: python: '>=3.9' @@ -5615,25 +5865,17 @@ package: platform: linux-64 url: https://files.pythonhosted.org/packages/6b/20/471f41173930550f279ccb65596a5ac19b9ac974a8d93679bcd3e0c31498/mock-5.1.0-py3-none-any.whl version: 5.1.0 -- dependencies: {} - hash: - sha256: 40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 - manager: pip - name: pyyaml - platform: linux-64 - url: https://files.pythonhosted.org/packages/12/fc/a4d5a7554e0067677823f7265cb3ae22aed8a238560b5133b58cda252dad/PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl - version: '6.0' - category: main dependencies: - six: '*' + six: '>=1.12.0' hash: - sha256: 6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c + sha256: 051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24 manager: pip name: asttokens optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/f3/e1/64679d9d0759db5b182222c81ff322c2fe2c31e156a59afd6e9208c960e5/asttokens-2.2.1-py2.py3-none-any.whl - version: 2.2.1 + url: https://files.pythonhosted.org/packages/45/86/4736ac618d82a20d87d2f92ae19441ebc7ac9e7a581d7e58bbe79233b24a/asttokens-2.4.1-py2.py3-none-any.whl + version: 2.4.1 - category: main dependencies: numpy: '*' @@ -5660,23 +5902,23 @@ package: - dependencies: typing-extensions: '>=4.2.0' hash: - sha256: abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999 + sha256: 9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd manager: pip name: pydantic platform: linux-64 - url: https://files.pythonhosted.org/packages/65/d3/8ea06a592f4c218d3079ddb6d267015e6635c11ea4b282c2f5a9b62ca60b/pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - version: 1.10.11 + url: https://files.pythonhosted.org/packages/18/57/11b1e218908aae98d7df4364accc5e5a69db0a9396c011f494c69947e1b9/pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + version: 1.10.13 - category: main dependencies: ruamel.yaml.clib: '>=0.2.7' hash: - sha256: 23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 + sha256: b16b6c3816dff0a93dca12acf5e70afd089fa5acb80604afd1ffa8b465b7722c manager: pip name: ruamel.yaml optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/d9/0e/2a05efa11ea33513fbdf4a2e2576fe94fd8fa5ad226dbb9c660886390974/ruamel.yaml-0.17.32-py3-none-any.whl - version: 0.17.32 + url: https://files.pythonhosted.org/packages/35/79/5e2cffa1c77432f11cd93a5351f30732c997a239d3a3090856a72d6d8ba7/ruamel.yaml-0.17.40-py3-none-any.whl + version: 0.17.40 - category: main dependencies: mock: '*' @@ -5709,25 +5951,25 @@ package: pyyaml: '>=6.0,<7.0' ruamel.yaml: '>=0.17.21,<0.18.0' hash: - sha256: 47f1fc5904756b01d46a8d23a4f3950382086b716138e21a027cd44dc5101f27 + sha256: 7c237557d2a7c5f403474e54f9e5498758c71c24844e524a02656ac16369196d manager: pip name: hammer-vlsi optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/30/e4/37b77c7921b80d58d8b2a325c031e75d656319b676e7fd4555e02b651a9d/hammer_vlsi-1.1.2-py3-none-any.whl - version: 1.1.2 + url: https://files.pythonhosted.org/packages/dd/85/8a7ffd385db1dc84295ef3101559fe7ae0f8fa39942253ca270728642dc5/hammer_vlsi-1.2.0-py3-none-any.whl + version: 1.2.0 - category: main dependencies: asttokens: '>=2,<3' typing-extensions: '*' hash: - sha256: 1a441dad41c9a0615c6ae96464190eddccd2de8153254059ff18ffd7b3b84800 + sha256: 1ba4e88f909d3a4b97a565e1ea1199e5b050aa4bdad190c69086bfaed9680cc2 manager: pip name: icontract optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/d8/91/9756e7cf0b155e80bf9a62beffdd1dec4afce43cc6ab7f432f2267c62762/icontract-2.6.2-py3-none-any.whl - version: 2.6.2 + url: https://files.pythonhosted.org/packages/49/6f/92ae156eb6afd94ad4ecd38adadff16c83caa4c6d52bd4503a583cf054ab/icontract-2.6.6-py3-none-any.whl + version: 2.6.6 - category: main dependencies: icontract: '>=2.0.1,<3' diff --git a/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml b/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml index 64bd5ff6..61cc9654 100644 --- a/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml +++ b/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml @@ -9,7 +9,7 @@ # To update a single package to the latest version compatible with the version constraints in the source: # conda-lock lock --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml --update PACKAGE # To re-solve the entire environment, e.g. after changing a version constraint in the source file: -# conda-lock -f /scratch/abejgonza/cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy/conda-reqs/riscv-tools.yaml -f /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/chipyard.yaml -f /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/riscv-tools.yaml --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml +# conda-lock -f /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/chipyard.yaml -f /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/riscv-tools.yaml --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml metadata: channels: - url: ucb-bar @@ -21,14 +21,12 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: 0316ec2ff5cf432ddafadc75598f6b4f8bb206bdd13a8bfc2e3bcd184b559617 + linux-64: ca6a27eca59955764c48c1f6e92b9c0d88ab3b0ce2cf79bc2b35e847e0aecff4 platforms: - linux-64 sources: - - /scratch/abejgonza/cy/conda-reqs/chipyard.yaml - - /scratch/abejgonza/cy/conda-reqs/riscv-tools.yaml - - /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/chipyard.yaml - - /scratch/abejgonza/firesim/target-design/chipyard/conda-reqs/riscv-tools.yaml + - /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/chipyard.yaml + - /nscratch/jerryz/chipyard-proj/chipyard-master/conda-reqs/riscv-tools.yaml package: - category: main dependencies: {} @@ -66,25 +64,25 @@ package: - category: main dependencies: {} hash: - md5: a73ecd2988327ad4c8f2c331482917f2 - sha256: 525b7b6b5135b952ec1808de84e5eca57c7c7ff144e29ef3e96ae4040ff432c1 + md5: 01ffc8d36f9eba0ce0b3c1955fa780ee + sha256: fb4b9f4b7d885002db0b93e22f44b5b03791ef3d4efdc9d0662185a0faafd6b6 manager: conda name: ca-certificates optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda - version: 2023.7.22 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda + version: 2023.11.17 - category: main dependencies: {} hash: - md5: 8d22677b00e9ea665f757c70a98d2c6f - sha256: 327b40fc91521ad7ba7cc979e9ae40fafec145536b23c8f87a73cbb403eee1d8 + md5: 9936f9d4393c27069e6ee70338f955a5 + sha256: 5098310ea9ec4dae611a658c1ea26436001b2d2a4ed3c8e9468881337e02682f manager: conda name: conda-standalone optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/conda-standalone-23.7.2-ha770c72_0.conda - version: 23.7.2 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-standalone-23.10.0-ha770c72_0.conda + version: 23.10.0 - category: main dependencies: {} hash: @@ -121,13 +119,13 @@ package: - category: main dependencies: {} hash: - md5: 19410c3df09dfb12d1206132a1d357c5 - sha256: 470d5db54102bd51dbb0c5990324a2f4a0bc976faa493b22193338adb9882e2e + md5: 6185f640c43843e5ad6fd1c5372c3f80 + sha256: 056c85b482d58faab5fd4670b6c1f5df0986314cca3bc831d458b22e4ef2c792 manager: conda name: font-ttf-ubuntu optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda version: '0.83' - category: main dependencies: {} @@ -143,80 +141,69 @@ package: - category: main dependencies: {} hash: - md5: b9ae31bc2e565684ebaf82d4bd954d55 - sha256: 257495088b78d4344c7ea21145581ed6da1c5bf8320f49b659ce2ed2d6265f76 + md5: 2390dcf3fd78c2c426f1c5b6664fa4b7 + sha256: 12904b795e5cb877ce6a7bb30feba9bfbe1dd38bd5f520e6af8d89a51bb6b6a6 manager: conda name: libgcc-devel_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-devel_linux-64-12.3.0-h8bca6fd_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-11.4.0-h922705a_103.conda + version: 11.4.0 - category: main dependencies: {} hash: - md5: afb656a334c409dd9805508af1c89c7a - sha256: a06235f4c4b85b463d9b8a73c9e10c1b5b4105f8a0ea8ac1f2f5f64edac3dfe7 - manager: conda - name: libgfortran5 - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda - version: 13.1.0 -- category: main - dependencies: {} - hash: - md5: 7c80158949230e6d837186b20b2fcf13 - sha256: b311dad92ffafd29668fca6330dc707f4d7f154a4fa4c3859832897416de39ec + md5: be10a739476d68c464101836773463f1 + sha256: 4957848888d7a8cdc77c605357e759f0c9b08c18510f08a205f567666602ca2b manager: conda name: libstdcxx-devel_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-devel_linux-64-12.3.0-h8bca6fd_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-11.4.0-h922705a_103.conda + version: 11.4.0 - category: main dependencies: {} hash: - md5: 067bcc23164642f4c226da631f2a2e1d - sha256: 6f9eb2d7a96687938c0001166a3b308460a8eb02b10e9d0dd9e251f0219ea05c + md5: 937eaed008f6bf2191c5fe76f87755e9 + sha256: 6c6c49efedcc5709a66f19fb6b26b69c6a5245310fd1d9a901fd5e38aaf7f882 manager: conda name: libstdcxx-ng optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda - version: 13.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda + version: 13.2.0 - category: main dependencies: {} hash: - md5: 9da14a0b14cf61245d1a026b2f281405 - sha256: 423a10bbf512b1530c98c01c414ef97d551d0b0920d393ecc164dde17ce475f7 + md5: ca8ce27415e2e304ec35b3de2af12364 + sha256: b6f56d6c0a95dbd27bdcd5c666781c58c037850cebbaf62536a4fdf2bdcf2a2e manager: conda name: open_pdks.sky130a optional: false platform: linux-64 - url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.440_0_g43e733e-20230724_080446.tar.bz2 - version: 1.0.440_0_g43e733e + url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.460_0_gfdb1863-20231104_052339.tar.bz2 + version: 1.0.460_0_gfdb1863 - category: main dependencies: {} hash: - md5: 4eb33d14d794b0f4be116443ffed3853 - sha256: bcb15db27eb6fbc0fe15d23aa60dcfa58ef451d92771441068d4a911aea7bb9f + md5: 26322ec5d7712c3ded99dd656142b8ce + sha256: 456bec815bfc2b364763084d08b412fdc4c17eb9ccc66a36cb775fa7ac3cbaec manager: conda name: python_abi optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-3_cp310.conda + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda version: '3.10' - category: main dependencies: {} hash: - md5: 939e3e74d8be4dac89ce83b20de2492a - sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 + md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 + sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d manager: conda name: tzdata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - version: 2023c + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda + version: 2023d - category: main dependencies: font-ttf-dejavu-sans-mono: '' @@ -244,30 +231,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-h4a8ded7_13.tar.bz2 version: 3.10.0 -- category: main - dependencies: - libgfortran5: 13.1.0 h15d22d2_0 - hash: - md5: 506dc07710dd5b0ba63cbf134897fc10 - sha256: 429e1d8a3e70b632df5b876e3fc322a56f769756693daa07114c46fa5098684e - manager: conda - name: libgfortran-ng - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda - version: 13.1.0 - category: main dependencies: _libgcc_mutex: 0.1 conda_forge hash: - md5: 56ca14d57ac29a75d23a39eb3ee0ddeb - sha256: 5d441d80b57f857ad305a65169a6b915d4fd6735cdc9e9bded35d493c91ef16d + md5: 7124cbb46b13d395bdde68f2d215c989 + sha256: 6ebedee39b6bbbc969715d0d7fa4b381cce67e1139862604ffa393f821c08e81 manager: conda name: libgomp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda - version: 13.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda + version: 13.2.0 - category: main dependencies: _libgcc_mutex: 0.1 conda_forge @@ -324,14 +299,14 @@ package: _libgcc_mutex: 0.1 conda_forge _openmp_mutex: '>=4.5' hash: - md5: cd93f779ff018dd85c7544c015c9db3c - sha256: fba897a02f35b2b5e6edc43a746d1fa6970a77b422f258246316110af8966911 + md5: 23fdf1fef05baeb7eadc2aed5fb0011f + sha256: 5e88f658e07a30ab41b154b42c59f079b168acfa9551a75bdc972099453f4105 manager: conda name: libgcc-ng optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda - version: 13.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda + version: 13.2.0 - category: main dependencies: libgcc-ng: '>=12' @@ -344,6 +319,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda version: 1.2.9 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: 93729f7a54b25cb135ac2b67ea3a7603 + sha256: dba8a20acedc6bc3574e4068c196969881462ad831aae267d25fbc9409785a6b + manager: conda + name: aws-c-common + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.10-hd590300_0.conda + version: 0.9.10 - category: main dependencies: libgcc-ng: '>=9.4.0' @@ -370,28 +357,28 @@ package: version: '2.40' - category: main dependencies: - libgcc-ng: '>=9.3.0' + libgcc-ng: '>=12' hash: - md5: a1fd65c7ccbf10880423d82bca54eb54 - sha256: cb521319804640ff2ad6a9f118d972ed76d86bea44e5626c09a13d38f562e1fa + md5: 69b8b6202a07720f448be700e300ccf4 + sha256: 242c0c324507ee172c0e0dd2045814e746bb303d1eb78870d182ceb0abc726a8 manager: conda name: bzip2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda version: 1.0.8 - category: main dependencies: libgcc-ng: '>=12' hash: - md5: e8c18d865be43e2fb3f7a145b6adf1f5 - sha256: c4276b1a0e8f18ab08018b1881666656742b325e0fcf2354f714e924d28683b6 + md5: f5842b88e9cbfa177abfaeacd457a45d + sha256: b68b0611d1c9d0222b56d5fe3d634e7a26979c3aef30f5f48b1593e7249e8f7a manager: conda name: c-ares optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda - version: 1.19.1 + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.24.0-hd590300_0.conda + version: 1.24.0 - category: main dependencies: libgcc-ng: '>=12' @@ -416,18 +403,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/ctags-5.8-h14c3975_1000.tar.bz2 version: '5.8' -- category: main - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - hash: - md5: 6bfb79319763a11c7423c9d0e0ee00b7 - manager: conda - name: dromajo - optional: false - platform: linux-64 - url: https://conda.anaconda.org/ucb-bar/linux-64/dromajo-1.0.0-0_h1234567_g6a6e34e.tar.bz2 - version: 1.0.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -479,17 +454,17 @@ package: version: 5.2.1 - category: main dependencies: - libgcc-ng: '>=7.5.0' - libstdcxx-ng: '>=7.5.0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' hash: - md5: b94cf2db16066b242ebd26db2facbd56 - sha256: 07a5319e1ac54fe5d38f50c60f7485af7f830b036da56957d0bfb7558a886198 + md5: 0e33ef437202db431aa5a928248cf2e8 + sha256: 2a50495b6bbbacb03107ea0b752d8358d4a40b572d124a8cade068c147f344f5 manager: conda name: gmp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.2.1-h58526e2_0.tar.bz2 - version: 6.2.1 + url: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_0.conda + version: 6.3.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -505,16 +480,16 @@ package: version: 1.3.13 - category: main dependencies: - libgcc-ng: '>=10.3.0' + libgcc-ng: '>=12' hash: - md5: 30bd3316aac2d72f498a04b2a49c1050 - sha256: 9a233d5f734f2a4bed786041a9823b69dad5b6757d84341e9f5c822ec89f083b + md5: cb8143aa2e59e9684c41dfdf74af38ac + sha256: 91583f2d85cded2cd81af17f23464888d53a1f1e3424456ee1befc3f73436d7b manager: conda name: gzip optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gzip-1.12-h166bdaf_0.tar.bz2 - version: '1.12' + url: https://conda.anaconda.org/conda-forge/linux-64/gzip-1.13-hd590300_0.conda + version: '1.13' - category: main dependencies: libgcc-ng: '>=12' @@ -558,25 +533,25 @@ package: libgcc-ng: '>=12' libstdcxx-ng: '>=12' hash: - md5: d1db1b8be7c3a8983dcbbbfe4f0765de - sha256: 3c6fab31ed4dc8428605588454596b307b1bd59d33b0c7073c407ab51408b011 + md5: 2785ddf4cb0e7e743477991d64353947 + sha256: 8729021a93e67bb93b4e73ef0a132499db516accfea11561b667635bcd0507e7 manager: conda name: libabseil optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda - version: '20230125.3' + url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230802.1-cxx17_h59595ed_0.conda + version: '20230802.1' - category: main dependencies: libgcc-ng: '>=12' hash: - md5: e805cbec4c29feb22e019245f7e47b6c - sha256: 610a583c2c356fe7a864cd6e5b0fa73c25bdafcfbcada9d0d9f999392a412a51 + md5: aec6c91c7371c26392a06708a73c70e5 + sha256: 40f29d1fab92c847b083739af86ad2f36d8154008cf99b64194e4705a1725d78 manager: conda name: libbrotlicommon optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: @@ -592,15 +567,15 @@ package: version: '1.18' - category: main dependencies: - libgcc-ng: '>=7.5.0' + libgcc-ng: '>=12' hash: - md5: 6f8720dff19e17ce5d48cfe7f3d2f0a3 - sha256: 8c9635aa0ea28922877dc96358f9547f6a55fc7e2eb75a556b05f1725496baf9 + md5: 172bf1cd1ff8629f2b1179945ed45055 + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 manager: conda name: libev optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda version: '4.33' - category: main dependencies: @@ -640,66 +615,64 @@ package: version: 3.4.2 - category: main dependencies: - libgcc-ng: '>=10.3.0' + libgcc-ng: '>=13.2.0' hash: - md5: b62b52da46c39ee2bc3c162ac7f1804d - sha256: 6a81ebac9f1aacdf2b4f945c87ad62b972f0f69c8e0981d68e111739e6720fd7 + md5: c714d905cdfa0e70200f68b80cc04764 + sha256: 0084a1d29a4f8ee3b8edad80eb6c42e5f0480f054f28cf713fb314bebb347a50 + manager: conda + name: libgfortran5 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda + version: 13.2.0 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: d66573916ffcf376178462f1b61c941e + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 manager: conda name: libiconv optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda version: '1.17' - category: main dependencies: libgcc-ng: '>=12' hash: - md5: 1edd9e67bdb90d78cea97733ff6b54e6 - sha256: b19de7bda34eac4fa931be11fa8d7640cdf1441dfd51c91786586a4a4c64c92f + md5: 323e90742f0f48fc22bea908735f55e6 + sha256: 0ef7378818c6d5b407692d02556c32e2f6af31c7542bca5160d0b92a59427fb5 manager: conda name: libjpeg-turbo optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda version: 2.1.5.1 - category: main dependencies: - libgcc-ng: '>=9.4.0' + libgcc-ng: '>=12' hash: - md5: 39b1328babf85c7c3a61636d9cd50206 - sha256: 32f4fb94d99946b0dabfbbfd442b25852baf909637f2eed1ffe3baea15d02aad + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 manager: conda name: libnsl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2 - version: 2.0.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + version: 2.0.1 - category: main dependencies: - libgcc-ng: '>=12' - libgfortran-ng: '' - libgfortran5: '>=12.3.0' + libgcc-ng: '>=11.4.0' hash: - md5: 6e4ef6ca28655124dcde9bd500e44c32 - sha256: c8e080ae4d57506238023e98869928ae93564e6407ef5b0c4d3a337e8c2b7662 - manager: conda - name: libopenblas - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda - version: 0.3.24 -- category: main - dependencies: - libgcc-ng: '>=12.3.0' - hash: - md5: bbc8fef17925480272a671b1d83431fa - sha256: 2fa38e53f7d58789283af351f014748a485ec8f4e7db3f150ed6274f50983663 + md5: e6f89a7be0ec320c1b1746971045b0e7 + sha256: c4c5c87f5c717e83299740f6a20393f9a131f05e2e9df63faafd6bb71dc58346 manager: conda name: libsanitizer optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-12.3.0-h0f45ef3_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-11.4.0-h4dcbe23_3.conda + version: 11.4.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -784,6 +757,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda version: 1.3.1 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: 5aa797f8787fe7a17d1b0821485b5adc + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + manager: conda + name: libxcrypt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + version: 4.4.36 - category: main dependencies: libgcc-ng: '>=12' @@ -849,51 +834,51 @@ package: dependencies: libgcc-ng: '>=12' hash: - md5: 681105bccc2a3f7f1a837d47d39c9179 - sha256: ccf61e61d58a8a7b2d66822d5568e2dc9387883dd9b2da61e1d787ece4c4979a + md5: 7dbaa197d7ba6032caf7ae7f32c1efa0 + sha256: 91cc03f14caf96243cead96c76fe91ab5925a695d892e83285461fb927dece5e manager: conda name: ncurses optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda version: '6.4' - category: main dependencies: libgcc-ng: '>=12' hash: - md5: 3cb2c7df59990bd37c2ce27fd906de68 - sha256: 49c569a69608eee784e815179a70c6ae4d088dac42b7df999044f68058d593bb + md5: 2bf1915cc107738811368afcb0993a59 + sha256: 1ef1b7efa69c7fb4e2a36a88316f307c115713698d1c12e19f55ae57c0482995 manager: conda name: nettle optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.8.1-hc379101_1.tar.bz2 - version: 3.8.1 + url: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda + version: 3.9.1 - category: main dependencies: libgcc-ng: '>=12' hash: - md5: 5be58359dbbf568c1ec0be87e0c6cb1b - sha256: f6c470ba56c43e5f6c75fd28b05256fd8f5d54d76df29c0652496bf3b104ae2b + md5: 77dab674d16c1525ebe65e67de30de0d + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed manager: conda name: oniguruma optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.8-h166bdaf_0.tar.bz2 - version: 6.9.8 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + version: 6.9.9 - category: main dependencies: ca-certificates: '' libgcc-ng: '>=12' hash: - md5: e5ac5227582d6c83ccf247288c0eb095 - sha256: b113fbac327c90cdc29c2fac0f2a2e5cc0d1918b2a5ffa7abd49b695b9b3c6e9 + md5: 603827b39ea2b835268adb8c821b8570 + sha256: 80efc6f429bd8e622d999652e5cba2ca56fcdb9c16a439d2ce9b4313116e4a87 manager: conda name: openssl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda - version: 3.1.2 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda + version: 3.2.0 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -908,16 +893,17 @@ package: version: 2.7.6 - category: main dependencies: - libgcc-ng: '>=7.5.0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' hash: - md5: 660e72c82f2e75a6b3fe6a6e75c79f19 - sha256: 6a0630fff84b5a683af6185a6c67adc8bdfa2043047fcb251add0d352ef60e79 + md5: 700edd63ccd5fc66b70b1c028cea9a68 + sha256: ae917851474eb3b08812b02c9e945d040808523ec53f828aa74a90b0cdf15f57 manager: conda name: pixman optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2 - version: 0.40.0 + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda + version: 0.42.2 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1122,6 +1108,59 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 version: 0.2.5 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + openssl: '>=3.2.0,<4.0a0' + hash: + md5: 9e51dfd5da37c1817d2a850188861987 + sha256: ec56734a24eee51e2f89bec3d686dd2c4dbb09d0305248b1d14e4c748065dc23 + manager: conda + name: aws-c-cal + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.9-h5d48c4d_2.conda + version: 0.6.9 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + hash: + md5: c55a1a0c1419fcdfce6d21c41b0f92ab + sha256: ce508018c1109d4e5c6b65695639deaa2beea31edc39145bb810efb13ffed2c3 + manager: conda + name: aws-c-compression + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h7f92143_7.conda + version: 0.2.17 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + hash: + md5: a4a83424ad4eab023c6e5b4adf264006 + sha256: 8696e7023fde7c4588db8aedd08ffc0b4041c8449bd9edd50f237534cbcfac93 + manager: conda + name: aws-c-sdkutils + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.13-h7f92143_0.conda + version: 0.1.13 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + hash: + md5: 46bd4e9c2fd10de83bae22f0bb71139b + sha256: ac2082211e7d5fd3036f9abd7e398ef67d5327efb3808f17a30fcab59acacbfb + manager: conda + name: aws-checksums + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h7f92143_6.conda + version: 0.1.17 - category: main dependencies: libgcc-ng: '>=12' @@ -1175,20 +1214,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/findutils-4.6.0-h166bdaf_1001.tar.bz2 version: 4.6.0 -- category: main - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - ncurses: '>=6.3,<7.0a0' - hash: - md5: 46a56cfe00f36b35e2d321bfabebf873 - sha256: c8f93937ad2cdd170200cc5ba32d85229ef65b749544686884abad5a19b8ef7a - manager: conda - name: firtool - optional: false - platform: linux-64 - url: https://conda.anaconda.org/ucb-bar/linux-64/firtool-1.30.0-0_h1234567_gdb40efbcd.conda - version: 1.30.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1206,71 +1231,59 @@ package: - category: main dependencies: binutils_impl_linux-64: '>=2.39' - libgcc-devel_linux-64: 12.3.0 h8bca6fd_0 - libgcc-ng: '>=12.3.0' - libgomp: '>=12.3.0' - libsanitizer: 12.3.0 h0f45ef3_0 - libstdcxx-ng: '>=12.3.0' + libgcc-devel_linux-64: 11.4.0 h922705a_103 + libgcc-ng: '>=11.4.0' + libgomp: '>=11.4.0' + libsanitizer: 11.4.0 h4dcbe23_3 + libstdcxx-ng: '>=11.4.0' sysroot_linux-64: '' hash: - md5: 1e41f51d89695fd3f810e2245517460b - sha256: ccbbb82de1ca95b02477e4340c5791e49424b379c6caa27e89bae3c40b7ad296 + md5: b17749a6ae62cf9a5eafd96a6bcaad0e + sha256: 24d34853611b8758c40fa9d6a0d0b738312f51af9fed8fa6c6422f15ec475763 manager: conda name: gcc_impl_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-12.3.0-he2b93b0_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-11.4.0-h7aa1c59_3.conda + version: 11.4.0 - category: main dependencies: - libgcc-ng: '>=7.5.0' - oniguruma: '>=6.9.3,<6.10.0a0' + libgcc-ng: '>=12' + oniguruma: '>=6.9.9,<6.10.0a0' hash: - md5: 8578ae83310b8c9f5717f1aa65054f36 - sha256: 00e69aec19174e61c70b652bb62c77c0947a27d6720bda0cb8d5be654020804a + md5: 80814f94713e35df60aad6c4b235de87 + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d manager: conda name: jq optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.6-h36c2ea0_1000.tar.bz2 - version: '1.6' + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + version: 1.7.1 - category: main dependencies: - libopenblas: '>=0.3.24,<1.0a0' - hash: - md5: bcddbb497582ece559465b9cd11042e7 - sha256: 92142c12eb42172365c96c865be8f164a2653649b28b23bded0e658f8d5d0815 - manager: conda - name: libblas - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openblas.conda - version: 3.9.0 -- category: main - dependencies: - libbrotlicommon: 1.1.0 hd590300_0 + libbrotlicommon: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: 43017394a280a42b48d11d2a6e169901 - sha256: 4eb58ab712e20d89b712a4a9e53a25ed94f63c36135d3f537ce2c51507c5abc9 + md5: f07002e225d7a60a694d42a7bf5ff53f + sha256: 86fc861246fbe5ad85c1b6b3882aaffc89590a48b42d794d3d5c8e6d99e5f926 manager: conda name: libbrotlidec optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: - libbrotlicommon: 1.1.0 hd590300_0 + libbrotlicommon: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: 8e3e1cb77c4b355a3776bdfb74095bed - sha256: f15b3f3d6b33d46c49f5574e2427b76a3c713e27bf6c043b8f0fd84ffc57d51e + md5: 5fc11c6020d421960607d821310fcd4d + sha256: f751b8b1c4754a2a8dfdc3b4040fa7818f35bbf6b10e905a47d3a194b746b071 manager: conda name: libbrotlienc optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: @@ -1285,6 +1298,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 version: 3.1.20191231 +- category: main + dependencies: + libgfortran5: 13.2.0 ha4646dd_3 + hash: + md5: 73031c79546ad06f1fe62e57fdd021bc + sha256: 5b918950b84605b6865de438757f507b1eff73c96fd562f7022c80028b088c14 + manager: conda + name: libgfortran-ng + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda + version: 13.2.0 - category: main dependencies: gettext: '>=0.21.1,<1.0a0' @@ -1314,21 +1339,21 @@ package: version: '5.39' - category: main dependencies: - c-ares: '>=1.18.1,<2.0a0' - libev: '>=4.33,<4.34.0a0' + c-ares: '>=1.23.0,<2.0a0' + libev: '>=4.33,<5.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.0.8,<4.0a0' + openssl: '>=3.2.0,<4.0a0' hash: - md5: 613955a50485812985c059e7b269f42e - sha256: ecd6b08c2b5abe7d1586428c4dd257dcfa00ee53700d79cdc8bca098fdfbd79a + md5: 700ac6ea6d53d5510591c4344d5c989a + sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb manager: conda name: libnghttp2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda - version: 1.52.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + version: 1.58.0 - category: main dependencies: libgcc-ng: '>=12' @@ -1344,32 +1369,32 @@ package: version: 1.6.39 - category: main dependencies: - libabseil: '>=20230125.3,<20230126.0a0' + libabseil: '>=20230802.1,<20230803.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 78c10e8637a6f8d377f9989327d0267d - sha256: 2e2a9b612b8ef8b928f8efac835cd2914722bbab348fa643b99db2efd3b34185 + md5: 1a0287ab734591ad63603734f923016b + sha256: 3e0f6454190abb27edd2aeb724688ee440de133edb02cbb17d5609ba36aa8be0 manager: conda name: libprotobuf optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda - version: 4.23.3 + url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.24.4-hf27288f_0.conda + version: 4.24.4 - category: main dependencies: libgcc-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 903fa782a9067d5934210df6d79220f6 - sha256: e715fab7ec6b3f3df2a5962ef372ff0f871d215fe819482dcd80357999513652 + md5: 3b6a9f225c3dbe0d24f4fedd4625c5bf + sha256: ee2c4d724a3ed60d5b458864d66122fb84c6ce1df62f735f90d8db17b66cd88a manager: conda name: libsqlite optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda - version: 3.43.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda + version: 3.44.2 - category: main dependencies: libgcc-ng: '>=12' @@ -1433,14 +1458,14 @@ package: gmp: '>=6.2.1,<7.0a0' libgcc-ng: '>=12' hash: - md5: 14d87bdff2cbd3b1179a29fb316ed743 - sha256: 03097f21c75b0936471809e533dbae44af9d9ae696ecf264d1a929fc9f9e4b83 + md5: 4c28f3210b30250037a4a627eeee9e0f + sha256: 008230a53ff15cf61966476b44f7ba2c779826825b9ca639a0a2b44d8f7aa6cb manager: conda name: mpfr optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.0-hb012696_0.conda - version: 4.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda + version: 4.2.1 - category: main dependencies: libffi: '>=3.4.2,<3.5.0a0' @@ -1459,28 +1484,28 @@ package: dependencies: bzip2: '>=1.0.8,<2.0a0' libgcc-ng: '>=12' - libzlib: '>=1.2.12,<1.3.0a0' + libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 69e2c796349cd9b273890bee0febfe1b - sha256: 7a29ec847556eed4faa1646010baae371ced69059a4ade43851367a076d6108a + md5: 679c8961826aa4b50653bce17ee52abe + sha256: 3ca54ff0abcda964af7d4724d389ae20d931159ae1881cfe57ad4b0ab9e6a380 manager: conda name: pcre2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 - version: '10.40' + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda + version: '10.42' - category: main dependencies: libgcc-ng: '>=12' - libnsl: '>=2.0.0,<2.1.0a0' + libxcrypt: '>=4.4.36' hash: - md5: 3e785bff761095eb7f8676f4694bd1b1 - sha256: 6e18c1488d191cb1a43a483f44fffa75668779a29927319b4adeb10da12ad06b + md5: f2cfec9406850991f4e3d960cc9e3321 + sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 manager: conda name: perl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-4_hd590300_perl5.conda + url: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda version: 5.32.1 - category: main dependencies: @@ -1508,6 +1533,19 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda version: '8.2' +- category: main + dependencies: + libgcc-ng: '>=12' + openssl: '>=3.2.0,<4.0a0' + hash: + md5: 3d1b58d2664d96f9fbc0afe5e1d04632 + sha256: f6cc2bdcb5d809bbaae218e03bdefef4a309d1fc7ccc9444fda59bd4553a83f8 + manager: conda + name: s2n + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.0-h06160fa_0.conda + version: 1.4.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1536,17 +1574,17 @@ package: version: '1.34' - category: main dependencies: - libgcc-ng: '>=9.4.0' - libzlib: '>=1.2.11,<1.3.0a0' + libgcc-ng: '>=12' + libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: 5b8c42eb62e9fc961af70bdd6a26e168 - sha256: 032fd769aad9d4cad40ba261ab222675acb7ec951a8832455fce18ef33fa8df0 + md5: d453b98d9c83e71da0741bb0ff4d76bc + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e manager: conda name: tk optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2 - version: 8.6.12 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + version: 8.6.13 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -1615,6 +1653,21 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/autoconf-2.71-pl5321h2b4cb7a_1.conda version: '2.71' +- category: main + dependencies: + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + libgcc-ng: '>=12' + s2n: '>=1.4.0,<1.4.1.0a0' + hash: + md5: c930336aa72995f1b5459b51df3ba841 + sha256: 7426f7444cd43cd7a649670c7330c163b40f40aa832e82be873d9de91e49b05e + manager: conda + name: aws-c-io + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.36-he0cd244_2.conda + version: 0.13.36 - category: main dependencies: libgcc-ng: '>=12' @@ -1644,30 +1697,30 @@ package: version: 3.8.2 - category: main dependencies: - libbrotlidec: 1.1.0 hd590300_0 - libbrotlienc: 1.1.0 hd590300_0 + libbrotlidec: 1.1.0 hd590300_1 + libbrotlienc: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: aeafb07a327e3f14a796bf081ea07472 - sha256: f4ad40d9fddefbf0e920d508fe10b7da77faa3eed20cf09779ea5b78bbf04675 + md5: 39f910d205726805a958da408ca194ba + sha256: a641abfbaec54f454c8434061fffa7fdaa9c695e8a5a400ed96b4f07c0c00677 manager: conda name: brotli-bin optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda version: 1.1.0 - category: main dependencies: - gcc_impl_linux-64: '>=12.3.0,<12.3.1.0a0' + gcc_impl_linux-64: '>=11.4.0,<11.4.1.0a0' hash: - md5: 203fbb799caffdf242ccef5f9879d3a1 - sha256: b9db23cd4fd2df43c06734b3cdb7491e03472679282a058bca7148455704b6a4 + md5: 42003d7074d4daaf287d19987cd927bf + sha256: 2c30ddc6cb51a03fb5f671f55eaabcb9208d6ce701e6de2234518eec43a6f2d1 manager: conda name: conda-gcc-specs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-12.3.0-h83fac38_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-11.4.0-h240829a_3.conda + version: 11.4.0 - category: main dependencies: libgcc-ng: '>=7.5.0' @@ -1701,57 +1754,57 @@ package: libpng: '>=1.6.39,<1.7.0a0' libzlib: '>=1.2.13,<1.3.0a0' hash: - md5: e1232042de76d24539a436d37597eb06 - sha256: 1eb913727b54e9aa63c6d9a1177db4e2894cee97c5f26910a2b61899d5ac904f + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 manager: conda name: freetype optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda version: 2.12.1 - category: main dependencies: - gcc_impl_linux-64: 12.3.0.* + gcc_impl_linux-64: 11.4.0.* hash: - md5: cb7c7892032ecf45fcad76d67b6a3e9b - sha256: 19d68909b1016ce07f6d3056e32d23dbade083111ac2110ab1782c1309164234 + md5: 0c8d100583c5fd6d20cd5307aaedaf0d + sha256: b515e9222a8af974024b02c7265bed8e4edf912707a5a8fc207cbc8bc2ac0bff manager: conda name: gcc optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc-12.3.0-h8d2909c_1.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gcc-11.4.0-h7baecda_2.conda + version: 11.4.0 - category: main dependencies: libgcc-ng: '>=12' libidn2: '>=2,<3.0a0' libstdcxx-ng: '>=12' libtasn1: '>=4.19.0,<5.0a0' - nettle: '>=3.8.1,<3.9.0a0' + nettle: '>=3.9.1,<3.10.0a0' p11-kit: '>=0.24.1,<0.25.0a0' hash: - md5: cbe8e27140d67c3f30e01cfb642a6e7c - sha256: 4a47e4558395b98fff4c1c44ad358dade62b350a03b5a784d4bc589d6eb7ac9e + md5: 33eded89024f21659b1975886a4acf70 + sha256: 52d824a5d2b8a5566cd469cae6ad6920469b5a15b3e0ddc609dd29151be71be2 manager: conda name: gnutls optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.7.8-hf3e180e_0.tar.bz2 - version: 3.7.8 + url: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.7.9-hb077bed_0.conda + version: 3.7.9 - category: main dependencies: - gcc_impl_linux-64: 12.3.0 he2b93b0_0 - libstdcxx-devel_linux-64: 12.3.0 h8bca6fd_0 + gcc_impl_linux-64: 11.4.0 h7aa1c59_3 + libstdcxx-devel_linux-64: 11.4.0 h922705a_103 sysroot_linux-64: '' hash: - md5: 3f00aa0a8f8d3924890fecae937cc6bd - sha256: 87c7ec85f76aa065c2c991acd7bbf86d25b4724bc283f793400c14f5d5e39aa0 + md5: dbee4be21eb6dbf596afddf60ff120bf + sha256: 424d9989ea82e6777e569de6873cc56229a8982e274409c344473ad89bb7bbb7 manager: conda name: gxx_impl_linux-64 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.3.0-he2b93b0_0.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-11.4.0-h7aa1c59_3.conda + version: 11.4.0 - category: main dependencies: keyutils: '>=1.6.1,<2.0a0' @@ -1777,7 +1830,7 @@ package: lz4-c: '>=1.9.3,<1.10.0a0' lzo: '>=2.10,<3.0a0' openssl: '>=3.0.3,<4.0a0' - xz: '>=5.2.5,<5.3.0a0' + xz: '>=5.2.5,<6.0.0a0' zstd: '>=1.5.2,<1.6.0a0' hash: md5: c0c3973a9f2df3e1a408e3205d86a88d @@ -1788,18 +1841,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.5.2-hada088e_3.tar.bz2 version: 3.5.2 -- category: main - dependencies: - libblas: 3.9.0 18_linux64_openblas - hash: - md5: 93dd9ab275ad888ed8113953769af78c - sha256: b5a3eac5a1e14ad7054a19249afeee6536ab8c9fb6d6ddc26e277f5c3b1acce4 - manager: conda - name: libcblas - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-18_linux64_openblas.conda - version: 3.9.0 - category: main dependencies: gettext: '>=0.21.1,<1.0a0' @@ -1808,28 +1849,16 @@ package: libiconv: '>=1.17,<2.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - pcre2: '>=10.40,<10.41.0a0' + pcre2: '>=10.42,<10.43.0a0' hash: - md5: c6f951789c888f7bbd2dd6858eab69de - sha256: e909b5e648d1ace172aac2ddf9d755f72429b134155a9b07156acb58a77ceee1 + md5: 9bd06b12bbfa6fd1740fd23af4b0f0c7 + sha256: b1b594294a0fe4c9a51596ef027efed9268d60827e8ae61fb7545c521a631e33 manager: conda name: libglib optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda - version: 2.76.4 -- category: main - dependencies: - libblas: 3.9.0 18_linux64_openblas - hash: - md5: a1244707531e5b143c420c70573c8ec5 - sha256: 7b59c9bf8399b34818d36c7bbd30cd447649fe4ff2136d3102bb67da0af67a3a - manager: conda - name: liblapack - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-18_linux64_openblas.conda - version: 3.9.0 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda + version: 2.78.3 - category: main dependencies: libgcc-ng: '>=12' @@ -1846,6 +1875,20 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.3-hbf9e925_1.conda version: 16.0.3 +- category: main + dependencies: + libgcc-ng: '>=12' + libgfortran-ng: '' + libgfortran5: '>=12.3.0' + hash: + md5: d172b34a443b95f86089e8229ddc9a17 + sha256: 628564517895ee1b09cf72c817548bd80ef1acce6a8214a8520d9f7b44c4cfaf + manager: conda + name: libopenblas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda + version: 0.3.25 - category: main dependencies: lerc: '>=4.0.0,<5.0a0' @@ -1869,20 +1912,20 @@ package: - category: main dependencies: libgcc-ng: '>=12' - libprotobuf: '>=4.23.3,<4.23.4.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' - openssl: '>=3.1.1,<4.0a0' + openssl: '>=3.2.0,<4.0a0' perl: '>=5.32.1,<5.33.0a0 *_perl5' hash: - md5: 434a2df8dbd192cb511290763a4f93d8 - sha256: b0424b21c5d1790c04e96a7d62e10326fa3c8b0c263ad8cb4eda707b94317f98 + md5: 194cc570b66f8726e92eaa58d141b935 + sha256: 30ac68088afe7568df797549a091556cf55ea28154a3f27cb524005ea4be6086 manager: conda name: mosh optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mosh-1.4.0-pl5321hc529e37_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/mosh-1.4.0-pl5321h2f1bd5e_5.conda version: 1.4.0 - category: main dependencies: @@ -1904,25 +1947,26 @@ package: ld_impl_linux-64: '>=2.36.1' libffi: '>=3.4,<4.0a0' libgcc-ng: '>=12' - libnsl: '>=2.0.0,<2.1.0a0' - libsqlite: '>=3.42.0,<4.0a0' + libnsl: '>=2.0.1,<2.1.0a0' + libsqlite: '>=3.44.2,<4.0a0' libuuid: '>=2.38.1,<3.0a0' + libxcrypt: '>=4.4.36' libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' - openssl: '>=3.1.1,<4.0a0' + openssl: '>=3.2.0,<4.0a0' readline: '>=8.2,<9.0a0' - tk: '>=8.6.12,<8.7.0a0' + tk: '>=8.6.13,<8.7.0a0' tzdata: '' xz: '>=5.2.6,<6.0a0' hash: - md5: eb6f1df105f37daedd6dca78523baa75 - sha256: 05e2a7ce916d259f11979634f770f31027d0a5d18463b094e64a30500f900699 + md5: ed38140af93f81319ebc472fbcf16cca + sha256: 4234c8e301737aa245d12c8fb44a4128005795e42883977c29cca3f34c71a1eb manager: conda name: python optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda - version: 3.10.12 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.13-hd12c33a_1_cpython.conda + version: 3.10.13 - category: main dependencies: libgcc-ng: '>=12' @@ -1945,19 +1989,19 @@ package: - category: main dependencies: libgcc-ng: '>=12' - libsqlite: 3.43.0 h2797004_0 + libsqlite: 3.44.2 h2797004_0 libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' readline: '>=8.2,<9.0a0' hash: - md5: 713f9eac95d051abe14c3774376854fe - sha256: b3db86c1ae67bca79328a5d517330e1c95cf4e1f666e46ac9a90e64caf86449d + md5: 4f2892c672829693fd978d065db4e8be + sha256: bae479520fe770fe11996b4c240923ed097f851fbd2401d55540e551c9dbbef7 manager: conda name: sqlite optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda - version: 3.43.0 + url: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda + version: 3.44.2 - category: main dependencies: libgcc-ng: '>=9.4.0' @@ -1982,14 +2026,14 @@ package: xorg-xextproto: '>=7.3.0,<8.0a0' xorg-xproto: '' hash: - md5: 7590b76c3d11d21caa44f3fc38ac584a - sha256: 3360f81f7687179959a6bf1c762938240172e8bb3aef957e0a14fb12a0b7c105 + md5: 49e482d882669206653b095f5206c05b + sha256: 7a02a7beac472ae2759498550b5fc5261bf5be7a9a2b4648a3f67818a7bfefcf manager: conda name: xorg-libx11 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda - version: 1.8.6 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda + version: 1.8.7 - category: main dependencies: python: '>=3.6' @@ -2014,18 +2058,30 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2 version: 1.4.4 +- category: main + dependencies: + python: '>=3.6' + hash: + md5: 0dc2fce00a160271714647c019e3a8a8 + sha256: e030c0993ef56def50fb3b0262a98ba17295c83b6c696748add22aee406b7bd9 + manager: conda + name: archspec + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.2-pyhd8ed1ab_0.conda + version: 0.2.2 - category: main dependencies: python: '>=3.8' hash: - md5: 964bace0c38ce4733851a2a29679e3f9 - sha256: 1fe9b55d3daeb26ac404ec51f106ce8792d7d6548810ca87600cd9b9e9cfbd6e + md5: 0801250abb3d5b86010e20324f0dde94 + sha256: af221f16a23feea4d91db75b35c5720c9c448814af815fe6d45c5627eb75e897 manager: conda name: argcomplete optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.1.1-pyhd8ed1ab_0.conda - version: 3.1.1 + url: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.2.1-pyhd8ed1ab_0.conda + version: 3.2.1 - category: main dependencies: libgcc-ng: '>=12' @@ -2044,66 +2100,113 @@ package: dependencies: python: '>=3.7' hash: - md5: 3edfead7cedd1ab4400a6c588f3e75f8 - sha256: 063639cd568f5c7a557b0fb1cc27f098598c0d8ff869088bfeb82934674f8821 + md5: 5e4c0743c70186509d1412e03c2d8dfa + sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea manager: conda name: attrs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda - version: 23.1.0 + url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + version: 23.2.0 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + hash: + md5: 21dafb60b5854f82b196f32e5857dec6 + sha256: d2855cd791a95648ac773aa6561c61f9e77450f123c8aa82eea1d66e90d5bfb1 + manager: conda + name: aws-c-event-stream + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h0bcb0bb_8.conda + version: 0.3.2 +- category: main + dependencies: + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-compression: '>=0.2.17,<0.2.18.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + libgcc-ng: '>=12' + hash: + md5: 0b0f7174a0f94d2c9a02fb24f6fc0d00 + sha256: ff7e6252a299a59b7e6494723ef3043ba31643ec2a750b8593037bc757a2c4fa + manager: conda + name: aws-c-http + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.14-hd268abd_3.conda + version: 0.7.14 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 3bf53ba99470a36f488b416528061373 - sha256: 9e3bdb8d25b855f1969b24fa4934d8d93c7ede62a4d1c6e3c01d8d06403fceda + md5: 6dd3d49f65ceb05dbd527a5b6301611b + sha256: df399f6daedb506d2f0d2d0cc2619969b9042455c1f4314eee526bbf6f4d7aba manager: conda name: bcrypt optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.0.1-py310hcb5633a_0.conda - version: 4.0.1 + url: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py310hcb5633a_0.conda + version: 4.1.2 - category: main dependencies: - python: '>=3.7' + python: '>=3.8' hash: - md5: 2fb79ec81bad9492b6d59a06b3b647a4 - sha256: b6f32491536823e47cf6eb4717dd341385600a2b901235028dedc629a77aeb82 + md5: 550da20b2c2e38be9cc44bb819fda5d5 + sha256: c8d72c2af4f57898dfd5e4c62ae67f7fea1490a37c8b6855460a170d61591177 manager: conda name: blinker optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.2-pyhd8ed1ab_0.conda - version: 1.6.2 + url: https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda + version: 1.7.0 - category: main dependencies: python: 2.7.*|>=3.7 hash: - md5: 033eb25fffd222aceeca6d58cd953680 - sha256: 4ff828cceb8f55cb26d23b1a4c174d22c7cd92350221724bcaf2d6632e33fdee + md5: 56febe65315cc388a5d20adf2b39a74d + sha256: 0ff5173f6b20a5c95401aa52d10dbdc05c322fc568dc7417c6f76cf68e706d16 manager: conda name: boltons optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/boltons-23.0.0-pyhd8ed1ab_0.conda - version: 23.0.0 + url: https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda + version: 23.1.1 - category: main dependencies: - brotli-bin: 1.1.0 hd590300_0 - libbrotlidec: 1.1.0 hd590300_0 - libbrotlienc: 1.1.0 hd590300_0 + brotli-bin: 1.1.0 hd590300_1 + libbrotlidec: 1.1.0 hd590300_1 + libbrotlienc: 1.1.0 hd590300_1 libgcc-ng: '>=12' hash: - md5: 3db48055eab680e43a122e2c7494e7ae - sha256: 8ec33c09c428fcc5fd453e1bd349bb0000ca226716901d356bdf89cdd9b67ab2 + md5: f27a24d46e3ea7b70a1f98e50c62508f + sha256: f2d918d351edd06c55a6c2d84b488fe392f85ea018ff227daac07db22b408f6b manager: conda name: brotli optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda + version: 1.1.0 +- category: main + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* *_cp310 + hash: + md5: 1f95722c94f00b69af69a066c7433714 + sha256: e22268d81905338570786921b3def88e55f9ed6d0ccdd17d9fbae31a02fbef69 + manager: conda + name: brotli-python + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_1.conda version: 1.1.0 - category: main dependencies: @@ -2121,14 +2224,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 7f3dbc9179b4dde7da98dfb151d0ad22 - sha256: db66e31866ff4250c190788769e3a8a1709237c3e9c38d7143aae95ab75fcb31 + md5: 2011bcf45376341dd1d690263fdbc789 + sha256: afa22b77128a812cb57bc707c297d926561bd225a3d9dd74205d87a3b2d14a96 manager: conda name: certifi optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda - version: 2023.7.22 + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda + version: 2023.11.17 - category: main dependencies: python: '>=3.6.1' @@ -2145,14 +2248,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 313516e9a4b08b12dfb1e1cd390a96e3 - sha256: 0666a95fbbd2299008162e2126c009191e5953d1cad1878bf9f4d8d634af1dd4 + md5: 7f4a9e3fcff3f6356ae99244a014da6a + sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 manager: conda name: charset-normalizer optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda - version: 3.2.0 + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + version: 3.3.2 - category: main dependencies: __unix: '' @@ -2168,28 +2271,28 @@ package: version: 8.1.7 - category: main dependencies: - python: '>=3.6' + python: '>=3.8' hash: - md5: b325bfc4cff7d7f8a868f1f7ecc4ed16 - sha256: f0c2fd0e842899a05ddd7b147fb26424adf58be0e8e54e5bc68b8f7e67d05dcd + md5: 753d29fe41bb881e4b9c004f0abf973f + sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 manager: conda name: cloudpickle optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda - version: 2.2.1 + url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda + version: 3.0.0 - category: main dependencies: - python: '' + python: '>=3.7' hash: - md5: c08b4c1326b880ed44f3ffb04803332f - sha256: ddf1749f0fd5a098a7954d98267cebca83a36b86719ce4ab6fc4aa94ef518432 + md5: 3faab06a954c2a04039983f2c4a50d99 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 manager: conda name: colorama optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.4-pyh9f0ad1d_0.tar.bz2 - version: 0.4.4 + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + version: 0.4.6 - category: main dependencies: python: '>=3.6,<4.0' @@ -2204,16 +2307,16 @@ package: version: 0.4.1 - category: main dependencies: - python: '>=3.6' + python: '>=3.8' hash: - md5: a50559fad0affdbb33729a68669ca1cb - sha256: 3b594bc8aa0b9a51269d54c7a4ef6af777d7fad4bee16b05695e1124de6563f6 + md5: 5cd86562580f274031ede6aa6aa24441 + sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 manager: conda name: cycler optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2 - version: 0.11.0 + url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + version: 0.12.1 - category: main dependencies: expat: '>=2.4.2,<3.0a0' @@ -2232,51 +2335,63 @@ package: dependencies: python: 2.7|>=3.6 hash: - md5: 12d8aae6994f342618443a8f05c652a0 - sha256: 13c887cb4a29e1e853a118cfc0e42b72a7e1d1c50c66c0974885d37f0db30619 + md5: db16c66b759a64dc5183d69cc3745a52 + sha256: 3ff11acdd5cc2f80227682966916e878e45ced94f59c402efb94911a5774e84e manager: conda name: distlib optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda - version: 0.3.7 + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda + version: 0.3.8 +- category: main + dependencies: + python: '>=3.6' + hash: + md5: 67999c5465064480fa8016d00ac768f6 + sha256: 0d01c4da6d4f0a935599210f82ac0630fa9aeb4fc37cbbc78043a932a39ec4f3 + manager: conda + name: distro + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/distro-1.8.0-pyhd8ed1ab_0.conda + version: 1.8.0 - category: main dependencies: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 9815d5a3a63926f0877313c07b7c5d90 - sha256: ccf4e2d33f1e2c376de05d0ca93e0cc3fccac9785c5a832e6fca9cc1ce3f7470 + md5: 21b8fa2179290505e607f5ccd65b01b0 + sha256: f3a564449daedafe5931ab4efe7bc4f240182f2b760e7877f15b2898b7f1c988 manager: conda name: docutils optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.15.2-py310hff52083_6.tar.bz2 - version: 0.15.2 + url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2 + version: '0.19' - category: main dependencies: python: '>=3.7' hash: - md5: e6518222753f519e911e83136d2158d9 - sha256: c28f715e049fe0f09785660bcbffa175ffb438720e5bc5a60d56d4b08364b315 + md5: f6c211fee3c98229652b60a9a42ef363 + sha256: cf83dcaf9006015c8ccab3fc6770f478464a66a8769e1763ca5d7dff09d11d08 manager: conda name: exceptiongroup optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - version: 1.1.3 + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda + version: 1.2.0 - category: main dependencies: python: '>=3.7' hash: - md5: 3104cf0ab9fb9de393051bf92b10dbe9 - sha256: 47635be45aa6cbfd6af65c13b5f649aef84c484e1897aef625e4ad717663eebc + md5: 0c1729b74a8152fde6a38ba0a2ab9f45 + sha256: 4d742d91412d1f163e5399d2b50c5d479694ebcd309127abb549ca3977f89d2b manager: conda name: filelock optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda - version: 3.12.3 + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda + version: 3.13.1 - category: main dependencies: expat: '>=2.5.0,<3.0a0' @@ -2299,26 +2414,26 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: e239a69f354349af1117e336dd124067 - sha256: 36246402e402b5cd55ee3b216fc9a07591f554c46aabc50dcabd4607f6a33e94 + md5: f20cd4d9c1f4a8377d0818c819918bbb + sha256: 496d0ae05e81be0bd8e046bc48a3346f867caaad65041aa14ee2f3717af70db6 manager: conda name: frozenlist optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.0-py310h2372a71_0.conda - version: 1.4.0 + url: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.1-py310h2372a71_0.conda + version: 1.4.1 - category: main dependencies: python: '>=3.8' hash: - md5: b4a3c7bb3f45d47e085764ff096fa259 - sha256: 7c953b38e7d06be62a80d85dc72f899a90814e21079cb1189aa08ca6277f94ee + md5: bf40f2a8835b78b1f91083d306b493d2 + sha256: 9269a5464698e0fde1f9c78544552817370c26df86e2a5a7518544b6a55ae8ee manager: conda name: fsspec optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.0-pyh1a96a4e_0.conda - version: 2023.9.0 + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.2-pyhca7485f_0.conda + version: 2023.12.2 - category: main dependencies: libgcc-ng: '>=12' @@ -2369,42 +2484,42 @@ package: version: 0.7.6 - category: main dependencies: - gcc: 12.3.0.* - gxx_impl_linux-64: 12.3.0.* + gcc: 11.4.0.* + gxx_impl_linux-64: 11.4.0.* hash: - md5: 52061516ce5d0aebb4282f72ef2347e5 - sha256: 99157a7719683e8a18d31f73a04b7b8e3121181840c9c8066b5c0438d7f49e4f + md5: 4821dd86fa505a0d5b6aacd28ed8291f + sha256: e07c2da262b374fc9aad422a4927660ef96aec6d1445c7673a6ba58a445523a5 manager: conda name: gxx optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gxx-12.3.0-h8d2909c_1.conda - version: 12.3.0 + url: https://conda.anaconda.org/conda-forge/linux-64/gxx-11.4.0-h7baecda_2.conda + version: 11.4.0 - category: main dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 + __unix: '' + python: '>=3.8' hash: - md5: 43bd27c73e9e3b0bc508217ae409798f - sha256: dab441ddc4592e34b490fed4235c2c0b10b54616509c7ebc176c37c8389600d6 + md5: 2ed1fe4b9079da97c44cfe9c2e5078fd + sha256: cd93d5d4b1d98f7ce76a8658c35de9c63e17b3a40e52f40fa2f459e0da83d0b1 manager: conda name: humanfriendly optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/humanfriendly-10.0-py310hff52083_4.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd8ed1ab_6.conda version: '10.0' - category: main dependencies: python: '>=3.6' hash: - md5: 34272b248891bddccc64479f9a7fffed - sha256: 9887c35c374ec1847f167292d3fde023cb4c994a4ceeec283072b95440131f09 + md5: 1a76f09108576397c41c0b0c5bd84134 + sha256: 6ee4c986d69ce61e60a20b2459b6f2027baeba153f0a64995fd3cb47c2cc7e07 manager: conda name: idna optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 - version: '3.4' + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda + version: '3.6' - category: main dependencies: python: '>=3.4' @@ -2479,16 +2594,17 @@ package: version: 2.0.0 - category: main dependencies: - python: '' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* *_cp310 hash: - md5: 07d85c22a3beb102a48cd123df84c2a6 - sha256: da279af2285d8f575a7f5652e83bf7f36155c4c63154e385a9d171efcc607bc1 + md5: 08ec1463dbc5c806a32fc431874032ca + sha256: 316db08863469a56cdbfd030de5a2cc11ec7649ed7c50eff507e9caa0070ccaa manager: conda name: jsonpointer optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-2.0-py_0.tar.bz2 - version: '2.0' + url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py310hff52083_3.conda + version: '2.4' - category: main dependencies: libgcc-ng: '>=12' @@ -2496,13 +2612,13 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 741385a84f6a1b6623eb39226cc669e8 - sha256: 54bdf1fe6fdcd382d0a1c4b275aa3d3c2737bcfe4d869644ce0f351c96f995f3 + md5: b8d67603d43b23ce7e988a5d81a7ab79 + sha256: bb51906639bced3de1d4d7740ac284cdaa89e2f22e0b1ec796378b090b0648ba manager: conda name: kiwisolver optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_1.conda version: 1.4.5 - category: main dependencies: @@ -2510,14 +2626,14 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 8664f43451412071a7111211fe7e38f2 - sha256: a26e8c55b8d1b17e784c6e2ffa75ed4dec4a335c7df17f183dcc9c5149d6cd70 + md5: 24d67b3be879d3f72b199061189ff022 + sha256: 6dd8e02aa0ca786bae44793475141a2218882f5c225c4e31f0b1c70ac012e586 manager: conda name: lazy-object-proxy optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.9.0-py310h1fa729e_0.conda - version: 1.9.0 + url: https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.10.0-py310h2372a71_0.conda + version: 1.10.0 - category: main dependencies: libgcc-ng: '>=12' @@ -2532,6 +2648,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda version: '2.15' +- category: main + dependencies: + libopenblas: '>=0.3.25,<1.0a0' + hash: + md5: 2b7bb4f7562c8cf334fc2e20c2d28abc + sha256: 8a0ee1de693a9b3da4a11b95ec81b40dd434bd01fa1f5f38f8268cd2146bf8f0 + manager: conda + name: libblas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda + version: 3.9.0 - category: main dependencies: libgcc-ng: '>=12' @@ -2635,31 +2763,19 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda version: 1.3.1 -- category: main - dependencies: - python: '' - hash: - md5: c104d98e09c47519950cffb8dd5b4f10 - sha256: d3a68045ef74a2a7b8c8a55b242fdbc875d362e37adcf793613cf0d8c8e4fbf7 - manager: conda - name: lockfile - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/lockfile-0.12.2-py_1.tar.bz2 - version: 0.12.2 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 5597d9f9778af6883ae64f0e7d39416c - sha256: 91509d88d073f5baf30866219cee9c8ecef839fa9874fee600e46531c2822621 + md5: b74e07a054c479e45a83a83fc5be713c + sha256: ac46cc2f6d4bbeedcd2f508e43f43143a9286ced55730d8d97a3c91ceceb0d56 manager: conda name: markupsafe optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_1.conda version: 2.1.3 - category: main dependencies: @@ -2692,27 +2808,27 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 5311a49aaea44b73935c84a6d9a68e5f - sha256: da5030f22f6d1293ccdefefde17fcf1a5f337f87179c54dee2a2a1fc16d6d73a + md5: dc5263dcaa1347e5a456ead3537be27d + sha256: a5c7612029e3871b0af0bd69e8ee1545d3deb93b5bec29cf1bf72522375fda31 manager: conda name: msgpack-python optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hdf3cbec_0.conda - version: 1.0.5 + url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda + version: 1.0.7 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: b33287be963a70f8fb4b143b4561ba62 - sha256: 14312ac727a741224d45ab07f75253ca99235ec0534ba9603e627818666ff49a + md5: 7ca797f0a0c390ede770f415f5d5e039 + sha256: d8180dcee801bcde6408d924bab0010fc956ae7a14681694af21f9d4382d8ee8 manager: conda name: multidict optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.4-py310h1fa729e_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.4-py310h2372a71_1.conda version: 6.0.4 - category: main dependencies: @@ -2740,34 +2856,16 @@ package: version: 1.0.0 - category: main dependencies: - python: '>=3.8' + python: '>=3.9' hash: - md5: 254f787d5068bc89f578bf63893ce8b4 - sha256: 6b955c8530985fa727ad3323653a54af44ecf453cfdb1b549b3edff609bd3728 + md5: 425fce3b531bed6ec3c74fab3e5f0a1c + sha256: 7629aa4f9f8cdff45ea7a4701fe58dccce5bf2faa01c26eb44cbb27b7e15ca9d manager: conda name: networkx optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.1-pyhd8ed1ab_0.conda - version: '3.1' -- category: main - dependencies: - libblas: '>=3.9.0,<4.0a0' - libcblas: '>=3.9.0,<4.0a0' - libgcc-ng: '>=12' - liblapack: '>=3.9.0,<4.0a0' - libstdcxx-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 - hash: - md5: 188e72aa313da668464e35309e9a32b0 - sha256: 81bba557f0f6109f7a1cb8f4d739e5c9ef310a49f8a2842f1fc67bd3545067b0 - manager: conda - name: numpy - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py310ha4c1d20_0.conda - version: 1.25.2 + url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda + version: 3.2.1 - category: main dependencies: libgcc-ng: '>=12' @@ -2788,14 +2886,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 91cda59e66e1e4afe9476f8ef98f5c30 - sha256: ded536a96a00d45a693dbc2971bb688248324dadd129eddda2100e177583d768 + md5: 79002079284aa895f883c6b7f3f88fd6 + sha256: 69b3ace6cca2dab9047b2c24926077d81d236bef45329d264b394001e3c3e52f manager: conda name: packaging optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda - version: '23.1' + url: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + version: '23.2' - category: main dependencies: python: '>=2.7' @@ -2836,14 +2934,26 @@ package: dependencies: python: '>=3.6' hash: - md5: 89e3c7cdde7d3aaa2aee933b604dd07f - sha256: 7d055ffc8a02bf781a89d069db3454b453605cdaff300b82cedcc7133283e47e + md5: 405678b942f2481cecdb3e010f4925d9 + sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a manager: conda name: pkgutil-resolve-name optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda version: 1.3.10 +- category: main + dependencies: + python: '>=3.8' + hash: + md5: 45a5065664da0d1dfa8f8cd2eaf05ab9 + sha256: 9e4ff17ce802159ed31344eb913eaa877688226765b77947b102b42255a53853 + manager: conda + name: platformdirs + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.1.0-pyhd8ed1ab_0.conda + version: 4.1.0 - category: main dependencies: python: '>=3.8' @@ -2861,54 +2971,54 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: b640492254040227cc1cb5d13ed1d830 - sha256: 159feca2894a11ac2a3f4008fea3f675d6a7ea8f22683d6d8890b19c172db239 + md5: bd00e979ec558c3e062dc10f922d1177 + sha256: 87d42f2c79f741acb5d7d1ac437c1794b425d32cb4181d2a65bd6694943ca728 manager: conda name: portalocker optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/portalocker-2.7.0-py310hff52083_0.conda - version: 2.7.0 + url: https://conda.anaconda.org/conda-forge/linux-64/portalocker-2.8.2-py310hff52083_1.conda + version: 2.8.2 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: b0f0a014fc04012c05f39df15fe270ce - sha256: 6864a95001b67413f7d06e35dc2ef0f13afb8c93cde8e826321453eac1bf1991 + md5: eb1f8f278d0b00c7b6d5c01a5b06609f + sha256: 82d01c09f10cdc0b9333c9478a05bfd55f9cf7b5a1db079938b46920fedd9f7b manager: conda name: psutil optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h1fa729e_0.conda - version: 5.9.5 + url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.7-py310h2372a71_0.conda + version: 5.9.7 - category: main dependencies: - python: '' + python: '!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,!=3.5' hash: - md5: 06d04c9f8f72ac77911db942eda24fb9 - sha256: b2c1bb18ab7bf36263e0b3f29bd2991a108ec1957051f9f5d925efeaf7ed1344 + md5: fb1a800972b072aa4d16450983c81418 + sha256: 8b116da9acbb471e107203c11acaffcb259aca2367aa7e83e796e43ed5d381b3 manager: conda name: pyasn1 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.4.8-py_0.tar.bz2 - version: 0.4.8 + url: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda + version: 0.5.1 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 0e565d732f6660374b45d76761c09b06 - sha256: 9bf587a2a0f0f73b71740b079507ec99282b73c596ec73cc602d7ccf73350709 + md5: 0adaac9a86d59adae2bc86b3cdef2df1 + sha256: ea7faba72a38b1d9e799294ea270916d2ea3f4a491df06a4d5a55347f3a036ce manager: conda name: pycosat optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.4-py310h5764c6d_1.tar.bz2 - version: 0.6.4 + url: https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py310h2372a71_0.conda + version: 0.6.6 - category: main dependencies: python: 2.7.*|>=3.4 @@ -2925,14 +3035,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 40e5cb18165466773619e5c963f00a7b - sha256: 3f0f0fadc6084960ec8cc00a32a03529c562ffea3b527eb73b1653183daad389 + md5: 140a7f159396547e9799aa98f9f0742e + sha256: af5f8867450dc292f98ea387d4d8945fc574284677c8f60eaa9846ede7387257 manager: conda name: pygments optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - version: 2.16.1 + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + version: 2.17.2 - category: main dependencies: python: '>=3.6' @@ -2961,53 +3071,39 @@ package: dependencies: python: '>=3.6' hash: - md5: e8fbc1b54b25f4b08281467bc13b70cc - sha256: 4acc7151cef5920d130f2e0a7615559cce8bfb037aeecb14d4d359ae3d9bc51b + md5: 176f7d56f0cfe9008bdf1bccd7de02fb + sha256: 4a1332d634b6c2501a973655d68f08c9c42c0bd509c349239127b10572b8354b manager: conda name: pyparsing optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2 - version: 3.0.9 + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda + version: 3.1.1 - category: main dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 + __unix: '' + python: '>=3.8' hash: - md5: f732bec05ecc2e302a868d971ae484e0 - sha256: 7c1d3f51959fd5e829a114157bb110fdd6335d1c518293b4203474c78d9b48f9 - manager: conda - name: pyrsistent - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.19.3-py310h1fa729e_0.conda - version: 0.19.3 -- category: main - dependencies: - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 - hash: - md5: 378f2260e871f3ea46c6fa58d9f05277 - sha256: cb6e4821234cee05acd1996cef88e40dfc2d5ab12cf12c5b1d6ed9118f7f41a7 + md5: 2a7de29fb590ca14b5243c4c812c8025 + sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b manager: conda name: pysocks optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pysocks-1.7.1-py310hff52083_5.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 version: 1.7.1 - category: main dependencies: python: '>=3.6' hash: - md5: 2590495f608a63625e165915fb4e2e34 - sha256: 0108888507014fb24573c31e4deceb61c99e63d37776dddcadd7c89b2ecae0b6 + md5: c79cacf8a06a51552fc651652f170208 + sha256: d2381037bf362c78654a8ece0e0f54715e09113448ddd7ed837f688536cbf176 manager: conda name: python-tzdata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda - version: '2023.3' + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.4-pyhd8ed1ab_0.conda + version: '2023.4' - category: main dependencies: python: '>=3.6' @@ -3040,13 +3136,13 @@ package: python_abi: 3.10.* *_cp310 yaml: '>=0.2.5,<0.3.0a0' hash: - md5: 511120451bf728d52bb37c73d4069e57 - sha256: 134f2bf206e21eff1b075c35b43e28dd97a9070ebc6879166629a7bac690348b + md5: bb010e368de4940771368bc3dc4c63e7 + sha256: aa78ccddb0a75fa722f0f0eb3537c73ee1219c9dd46cea99d6b9eebfdd780f3d manager: conda name: pyyaml optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_1.conda version: 6.0.1 - category: main dependencies: @@ -3054,14 +3150,14 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 5312e9c375fbe6a45e5537ce12c8a98e - sha256: cfe6c65db315e0b5860d9cb2bb7b838a575bdb65447182f3865fe4026b521b8d + md5: 4a9ba4e7af60356e63b38a6d419acad6 + sha256: b9d2c96a468e4c871df098f6c34c72b160911fb98132e1ffd6ba92670cbeb523 manager: conda name: regex optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/regex-2023.8.8-py310h2372a71_0.conda - version: 2023.8.8 + url: https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py310h2372a71_0.conda + version: 2023.12.25 - category: main dependencies: __glibc: '>=2.17,<3.0.a0' @@ -3087,41 +3183,40 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 2f9b517412af46255cef5e53a22c264e - sha256: 4a74013e0e9dd6fa984a10edb53276cf42308d99404375b81548af019bfd068d + md5: 849507c9b0652ec09c110bcc5213f482 + sha256: ebd8fb3040ec0ba40fe72da8136b847edd6f878a8f6862e534165d721a8af0d8 manager: conda - name: ruamel.yaml.clib + name: rpds-py optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py310h1fa729e_1.conda - version: 0.2.7 + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.16.2-py310hcb5633a_0.conda + version: 0.16.2 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 - yaml: '>=0.2.5,<0.3.0a0' hash: - md5: f588192bd22fb64650ccb5781cd83fb0 - sha256: 4a17acbb2fae7b567b9f7527eb50833c266df00de7fee41f18bb2006dfab8939 + md5: 7c9da9721ee545d57ad759f020172853 + sha256: 00c76baad0a896f6f259093ec5328ac06cf422e6528745b28ee7e5057f54668f manager: conda - name: ruamel_yaml + name: ruamel.yaml.clib optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruamel_yaml-0.15.80-py310h5764c6d_1008.tar.bz2 - version: 0.15.80 + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py310h2372a71_2.conda + version: 0.2.7 - category: main dependencies: python: '>=3.7' hash: - md5: 4fe12573bf499ff85a0a364e00cc5c53 - sha256: dc5a777597e05ceddefc87d2f96389b7ae0afb097e558307af83a453db3e3887 + md5: fc2166155db840c634a1291a5c35a709 + sha256: 851901b1f8f2049edb36a675f0c3f9a98e1495ef4eb214761b048c6f696a06f7 manager: conda name: setuptools optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda - version: 68.1.2 + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + version: 68.2.2 - category: main dependencies: python: '' @@ -3136,16 +3231,16 @@ package: version: 1.16.0 - category: main dependencies: - python: '' + python: '>=3.5' hash: - md5: 3a8dc70789709aa315325d5df06fb7e4 - sha256: 091de70ee6bfe063e0c0f77336975d124fd1e3f49b9c58d97c0c7b3d287c0002 + md5: 62f26a3d1387acee31322208f0cfa3e0 + sha256: 23011cb3e064525bdb8787c75126a2e78d2344a72cd6773922006d1da1f2af16 manager: conda name: smmap optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/smmap-3.0.5-pyh44b312d_0.tar.bz2 - version: 3.0.5 + url: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + version: 5.0.0 - category: main dependencies: python: '>=2' @@ -3198,14 +3293,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 62f5b331c53d73e2f6c4c130b53518a0 - sha256: dc4abf58ca42f29e12b8c0f8aadedfca49cc1e97dab025d15cf000b1787df773 + md5: 074d0ce7a6261ab8b497c3518796ef3e + sha256: 53cc436ab92d38683df1320e4468a8b978428e800195bf1c8c2460e90b0bc117 manager: conda name: tomlkit optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.1-pyha770c72_0.conda - version: 0.12.1 + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + version: 0.12.3 - category: main dependencies: python: '>=3.5' @@ -3224,38 +3319,50 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: dfb49d3ac440e1a236080f9c300e642f - sha256: 38d517c89f79f3ff0d8f3f1ce46218e0f8e3a3fea743e7f3661eb913919aa94e + md5: b23e0147fa5f7a9380e06334c7266ad5 + sha256: 209b6788b81739d3cdc2f04ad3f6f323efd85b1a30f2edce98ab76d98079fac8 manager: conda name: tornado optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_1.conda version: 6.3.3 +- category: main + dependencies: + python: '>=3.10' + hash: + md5: 08316d001eca8854392cf2837828ea11 + sha256: ba49bed74ca170c5a3bf995c33a6179fd74b33abb2444f511862e7f9f57f9149 + manager: conda + name: truststore + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda + version: 0.8.0 - category: main dependencies: python: '>=3.6' hash: - md5: 1b133b01430fc4d03efba737aae0054f - sha256: 272505b7f8acc7dad0a32efc17e7241c18938f98c0055c5d5fb2530a32e34fe1 + md5: 13ce724cb44f7bc0ca0971d76e333c30 + sha256: c1c54f4b2b5b39c420b3a47dd6196355147c798c0a4a2bdaaba80435e9591fb3 manager: conda name: types-pytz optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-pytz-2023.3.0.1-pyhd8ed1ab_0.conda - version: 2023.3.0.1 + url: https://conda.anaconda.org/conda-forge/noarch/types-pytz-2023.3.1.1-pyhd8ed1ab_0.conda + version: 2023.3.1.1 - category: main dependencies: python: '>=3.6' hash: - md5: 22776dce28e8ba933e5cbcf20b62c583 - sha256: 61121b7ac3c6caf322ad2789ffe0887ae9e6c3ab28c9e911871afe5977828af7 + md5: 0cb14c80f66937df894d60626dd1921f + sha256: 91873f91a58337d0573584bcdc540ff5545bc460eda0fdd8bd2f471c808c0e4c manager: conda name: types-pyyaml optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.11-pyhd8ed1ab_0.conda - version: 6.0.12.11 + url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda + version: 6.0.12.12 - category: main dependencies: python: '>=3.6' @@ -3270,30 +3377,30 @@ package: version: 1.26.25.14 - category: main dependencies: - python: '>=3.7' + python: '>=3.8' hash: - md5: c39d6a09fe819de4951c2642629d9115 - sha256: 6edd6d5be690be492712cb747b6d62707f0d0c34ef56eefc796d91e5a03187d1 + md5: a92a6440c3fe7052d63244f3aba2a4a7 + sha256: f3c5be8673bfd905c4665efcb27fa50192f24f84fa8eff2f19cba5d09753d905 manager: conda name: typing_extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda - version: 4.7.1 + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda + version: 4.9.0 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: e972c5a1f472561cf4a91962cb01f4b4 - sha256: 332732c2b87445c3e071c86cacfbc72a99ba4ea55d0b9d65416894253782ca02 + md5: 72637c58d36d9475fda24700c9796f19 + sha256: 5ab2f2d4542ba0cc27d222c08ae61706babe7173b0c6dfa748aa37ff2fa9d824 manager: conda name: unicodedata2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2 - version: 15.0.0 + url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda + version: 15.1.0 - category: main dependencies: flex: '>=2.6.4,<3.0a0' @@ -3305,64 +3412,76 @@ package: perl: '' python: '' hash: - md5: efb0e7909f1a41159856e688e216bd26 - sha256: c24f5fc704ee3c0737456e7a4b8f75114b25a51812c6f801a22ed43652e0b211 + md5: 0b2929f84fe7d3a6117439507d5d50d9 + sha256: 1d6af07d2d19be7adc296e8b6c43bd3eb12b48d8ab8e0cec566e8f9872661813 manager: conda name: verilator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/verilator-5.008-h514fc35_1.conda - version: '5.008' + url: https://conda.anaconda.org/conda-forge/linux-64/verilator-5.020-h7cd9344_0.conda + version: '5.020' - category: main dependencies: - python: '' + python: '>=3.8' hash: - md5: 3563be4c5611a44210d9ba0c16113136 - sha256: 302f4f4bd1ad00c0be1426ecf6bb01db59cfd8aff3de0cf1596526dca1a6b70e + md5: bf4a1d1a97ca27b0b65bacd9e238b484 + sha256: ca757d0fc2dbd422af9d3238a8b4b630a6e11df3707a447bd89540656770d1d7 + manager: conda + name: wcwidth + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.12-pyhd8ed1ab_0.conda + version: 0.2.12 +- category: main + dependencies: + python: '>=2.6' + hash: + md5: daf5160ff9cde3a468556965329085b9 + sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 manager: conda name: webencodings optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-py_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda version: 0.5.1 - category: main dependencies: python: '>=3.8' hash: - md5: 23f16ffe9711ac76b391c60ce4ea4656 - sha256: 93aecd1b6b0fcb0ffbf96e367e56713824e648f6c02c9daaaedfef5f8e03caa9 + md5: 50ad31e07d706aae88b14a4ac9c73f23 + sha256: d9b537d5b7c5aa7a02a4ce4c6b755e458bd8083b67752a73c92d113ccec6c10f manager: conda name: websocket-client optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.2-pyhd8ed1ab_0.conda - version: 1.6.2 + url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda + version: 1.7.0 - category: main dependencies: python: '>=3.7' hash: - md5: 1ccd092478b3e0ee10d7a891adbf8a4f - sha256: 21bcec5373b04d739ab65252b5532b04a08d229865ebb24b5b94902d6d0a77b0 + md5: 1cdea58981c5cbc17b51973bcaddcea7 + sha256: 80be0ccc815ce22f80c141013302839b0ed938a2edb50b846cf48d8a8c1cfa01 manager: conda name: wheel optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda - version: 0.41.2 + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda + version: 0.42.0 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: cbfdcc9c243ac7f080cf60833b482f97 - sha256: a9c0b455c26f24b5ba2626440c375aa636b6d80fff3efe90d8f61cec8f7018a0 + md5: d9dc9c45bdc2b38403e6b388581e92f0 + sha256: 2adc15cd1e66845c1ab498735e2f828003e2d5fe20eed1febddb712f58793c31 manager: conda name: wrapt optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.15.0-py310h1fa729e_0.conda - version: 1.15.0 + url: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310h2372a71_0.conda + version: 1.16.0 - category: main dependencies: python: '>=3.6' @@ -3438,14 +3557,14 @@ package: dependencies: python: '>=3.8' hash: - md5: 2da0451b54c4563c32490cb1b7cf68a1 - sha256: 16d72127e150a3d5cbdc0b82c4069ef5be135c64bc99e71e7928507910669b41 + md5: 2e4d6bc0b14e10f895fc6791a7d9b26a + sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 manager: conda name: zipp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda - version: 3.16.2 + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + version: 3.17.0 - category: main dependencies: frozenlist: '>=1.1.0' @@ -3459,19 +3578,52 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2 version: 1.3.1 +- category: main + dependencies: + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-c-sdkutils: '>=0.1.13,<0.1.14.0a0' + libgcc-ng: '>=12' + hash: + md5: d42aebb91e28e2fee2a0218cfbff2c90 + sha256: b06ef95458fc70af4230c9c6690011235cd25288752ff7aa25492fc6d1c0e028 + manager: conda + name: aws-c-auth + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.8-h538f98c_2.conda + version: 0.7.8 +- category: main + dependencies: + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + libgcc-ng: '>=12' + hash: + md5: 0cca0a3d7dc82f219ac46635478952f6 + sha256: 246276b22393302b4e9acb934ec40bb78d3be74e7bd2c110272b46c5370a60ee + manager: conda + name: aws-c-mqtt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.10-h35285c7_2.conda + version: 0.9.10 - category: main dependencies: python: '>=3.7' pytz: '' + setuptools: '' hash: - md5: ac432e732804a81ddcf29c92ead57cde - sha256: 2d9b8768bf8b45073830f7104278c6eb17d78b0f509c9d818ff06b9c4d60283a + md5: 9669586875baeced8fc30c0826c3270e + sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6 manager: conda name: babel optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda - version: 2.12.1 + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + version: 2.14.0 - category: main dependencies: fontconfig: '>=2.14.2,<3.0a0' @@ -3507,14 +3659,14 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 800596144bb613cd7ac58b80900ce835 - sha256: f223c8782195f19dbe7cfd27e329de8b0e2205a090ee2a6891e0695d4d634854 + md5: 45846a970e71ac98fd327da5d40a0a2c + sha256: 007e7f69ab45553b7bf11f2c1b8d3f3a13fd42997266a0d57795f41c7d38df36 manager: conda name: cffi optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.conda - version: 1.15.1 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda + version: 1.16.0 - category: main dependencies: libclang-cpp16: '>=16.0.3,<16.1.0a0' @@ -3581,22 +3733,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/cmake-3.26.3-h077f3f9_0.conda version: 3.26.3 -- category: main - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.16' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 - hash: - md5: 684399f9ddc0b9d6f3b6164f6107098e - sha256: 709dae7fbfdb1ab7aeeb060bae9095e5a18bd3849fd3afbf618a7be3a4117e76 - manager: conda - name: contourpy - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py310hd41b1e2_0.conda - version: 1.1.0 - category: main dependencies: krb5: '>=1.20.1,<1.21.0a0' @@ -3639,7 +3775,7 @@ package: libstdcxx-ng: '>=10.3.0' libzlib: '>=1.2.11,<1.3.0a0' sqlite: '>=3.38.2,<4.0a0' - xz: '>=5.2.5,<5.3.0a0' + xz: '>=5.2.5,<6.0.0a0' zstd: '>=1.5.2,<1.6.0a0' hash: md5: 2e9ec0e21d51118b004f1f98e4fbf598 @@ -3659,27 +3795,27 @@ package: python_abi: 3.10.* *_cp310 unicodedata2: '>=14.0.0' hash: - md5: 1f18231ffab82f236ce074b2aaa07e54 - sha256: 63c6f5a5b94e6eb8a567e8e187761fea0edab749422aabfe85906a92062bcbe3 + md5: 27df6604157a2a9e782cbe720f752cf5 + sha256: 468904105e134301032749de8bf613a5cbc61d4de51bce25524716b6386885a4 manager: conda name: fonttools optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py310h2372a71_0.conda - version: 4.42.1 + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.47.0-py310h2372a71_0.conda + version: 4.47.0 - category: main dependencies: - python: '>=3.4' - smmap: '>=3.0.1,<4' + python: '>=3.7' + smmap: '>=3.0.1,<6' hash: - md5: 3706d2f3d7cb5dae600c833345a76132 - sha256: 0003ab2b971913380633c711bf49a54dcf06e179986c725b0925854b58878377 + md5: 623b19f616f2ca0c261441067e18ae40 + sha256: 52ab2798be31b8f509eeec458712f447ced4f96ecb672c6c9a42778f47e07b1b manager: conda name: gitdb optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.10-pyhd8ed1ab_0.conda - version: 4.0.10 + url: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + version: 4.0.11 - category: main dependencies: python: '>=3.6' @@ -3712,27 +3848,27 @@ package: python: '>=3.8' zipp: '>=0.5' hash: - md5: 4e9f59a060c3be52bc4ddc46ee9b6946 - sha256: 2797ed927d65324309b6c630190d917b9f2111e0c217b721f80429aeb57f9fcf + md5: 746623a787e06191d80a2133e5daff17 + sha256: e72d05f171f4567004c9360a838e9d5df21e23dcfeb945066b53a6e5f754b861 manager: conda name: importlib-metadata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - version: 6.8.0 + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.1-pyha770c72_0.conda + version: 7.0.1 - category: main dependencies: - python: '>=3.7' + python: '>=3.8' zipp: '>=3.1.0' hash: - md5: 748955a096313b51b314263402b83250 - sha256: f6a7af42e185bb188e6959c4af909cebacd291e2e1ceea6b2f246bb4da93eb7e + md5: 3d5fa25cf42f3f32a12b2d874ace8574 + sha256: e584f9ae08fb2d242af0ce7e19e3cd2f85f362d8523119e08f99edb962db99ed manager: conda name: importlib_resources optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-5.13.0-pyhd8ed1ab_0.conda - version: 5.13.0 + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda + version: 6.1.1 - category: main dependencies: more-itertools: '' @@ -3762,16 +3898,16 @@ package: - category: main dependencies: jsonpointer: '>=1.9' - python: '>=3.6' + python: '>=3.8' hash: - md5: 09150b51b0528a31a0f6500b96fdde82 - sha256: d87fd8da2d3327744821b6b1d1e5b76e4077224fb626ce02d6623a1bc6ee2563 + md5: bfdb7c5c6ad1077c82a69a8642c87aff + sha256: fbb17e33ace3225c6416d1604637c1058906b8223da968cc015128985336b2b4 manager: conda name: jsonpatch optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.32-pyhd8ed1ab_0.tar.bz2 - version: '1.32' + url: https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda + version: '1.33' - category: main dependencies: python: '' @@ -3785,6 +3921,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/junit-xml-1.9-pyh9f0ad1d_0.tar.bz2 version: '1.9' +- category: main + dependencies: + libblas: 3.9.0 20_linux64_openblas + hash: + md5: 36d486d72ab64ffea932329a1d3729a3 + sha256: 0e34fb0f82262f02fcb279ab4a1db8d50875dc98e3019452f8f387e6bf3c0247 + manager: conda + name: libcblas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda + version: 3.9.0 - category: main dependencies: expat: '>=2.5.0,<3.0a0' @@ -3809,6 +3957,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda version: 2.3.3 +- category: main + dependencies: + libblas: 3.9.0 20_linux64_openblas + hash: + md5: 6fabc51f5e647d09cc010c40061557e0 + sha256: ad7745b8d0f2ccb9c3ba7aaa7167d62fc9f02e45eb67172ae5f0dfb5a3b1a2cc + manager: conda + name: liblapack + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda + version: 3.9.0 - category: main dependencies: python: '' @@ -3827,21 +3987,21 @@ package: - category: main dependencies: libgcc-ng: '>=12' - mypy_extensions: '>=0.4.3' + mypy_extensions: '>=1.0.0' psutil: '>=4.0' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 tomli: '>=1.1.0' - typing_extensions: '>=3.10' + typing_extensions: '>=4.1.0' hash: - md5: 9b8878a92795d51dd78c40ee0f36f19a - sha256: d334188ba5268af085d7ad5cb763825ee977c3f464447b2e0404d53b10f3ed79 + md5: 3320dc32fc6bd29ab4a16cf22bc35fc2 + sha256: 6c01268327db83c70c38cfc87fc13a71d09cda123ae06cd6edbbe620c2b20f33 manager: conda name: mypy optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.5.1-py310h2372a71_0.conda - version: 1.5.1 + url: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.8.0-py310h2372a71_0.conda + version: 1.8.0 - category: main dependencies: python: 2.7|>=3.7 @@ -3884,14 +4044,27 @@ package: setuptools: '' wheel: '' hash: - md5: e2783aa3f9235225eec92f9081c5b801 - sha256: 9e401b171856e12f6aa32ae5cc1ae1d3708aa7d705ddf359ee7dd0dffd73c2b5 + md5: 8591c748f98dcc02253003533bc2e4b1 + sha256: 29096d1d53c61aeef518729add2f405df86b3629d1d738a35b15095e6a02eeed manager: conda name: pip optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - version: 23.2.1 + url: https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda + version: 23.3.2 +- category: main + dependencies: + python: '>=3.7' + wcwidth: '' + hash: + md5: 59ba1bf8ea558751a0d391249a248765 + sha256: 78c2f3c6195ec350d7d6e5fa3e43274ca8191c181c97a867e2920faaeec0e9bc + manager: conda + name: prompt-toolkit + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.38-pyha770c72_0.conda + version: 3.0.38 - category: main dependencies: colorama: '' @@ -3902,14 +4075,14 @@ package: python: '>=3.7' tomli: '>=1.0.0' hash: - md5: 003aaefc025d902eec9ed8118e76ace7 - sha256: 713f1fd92a4a3d097646f0ca59b0531ad86e74d8a3184667380c99926f540fa6 + md5: a9d145de8c5f064b5fa68fb34725d9f4 + sha256: 8979721b7f86b183d21103f3ec2734783847d317c1b754f462f407efc7c60886 manager: conda name: pytest optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.1-pyhd8ed1ab_0.conda - version: 7.4.1 + url: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.4-pyhd8ed1ab_0.conda + version: 7.4.4 - category: main dependencies: python: '>=3.6' @@ -3942,6 +4115,20 @@ package: platform: linux-64 url: https://conda.anaconda.org/ucb-bar/linux-64/qemu-5.0.0-hb15d774_0.tar.bz2 version: 5.0.0 +- category: main + dependencies: + attrs: '>=22.2.0' + python: '>=3.8' + rpds-py: '>=0.7.0' + hash: + md5: a33161b983172ba6ef69d5fc850650cd + sha256: a6768fabc12f1eed87fec68c5c65439e908655cded1e458d70a164abbce13287 + manager: conda + name: referencing + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda + version: 0.30.2 - category: main dependencies: python: '>=3.5' @@ -3958,16 +4145,16 @@ package: - category: main dependencies: pyasn1: '>=0.1.3' - python: '' + python: '>=3.6' hash: - md5: 3452ab3790dbb1df9508b3fa4ea2f806 - sha256: 6ea0fcd8f40c7f78e2c6cff344bb91f457682aa352ee48364246371a41410ee8 + md5: 03bf410858b2cefc267316408a77c436 + sha256: 23214cdc15a41d14136754857fd9cd46ca3c55a7e751da3b3a48c673f0ee2a57 manager: conda name: rsa optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/rsa-4.7.2-pyh44b312d_0.tar.bz2 - version: 4.7.2 + url: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9-pyhd8ed1ab_0.tar.bz2 + version: '4.9' - category: main dependencies: libgcc-ng: '>=12' @@ -3976,14 +4163,14 @@ package: ruamel.yaml.clib: '>=0.1.2' setuptools: '' hash: - md5: 9a03abf74d5069bda767c1bce7a41e0b - sha256: bdbd5b73bc92f3bd4eea8b8475d912a9d42562ed494163fd3987404f514beb70 + md5: 97204ae92b703d74a983db0e6d07d009 + sha256: 2e390037976718f762b8db6703aadeb950fe4c409c64a7e5985157cbb2d58d52 manager: conda name: ruamel.yaml optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.32-py310h2372a71_0.conda - version: 0.17.32 + url: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.21-py310h1fa729e_3.conda + version: 0.17.21 - category: main dependencies: __unix: '' @@ -4017,26 +4204,40 @@ package: python: '>=3.6' types-urllib3: <1.27 hash: - md5: 700fb06cd011d594305e3b487d5a96a2 - sha256: 3be4637a6037786dd6a8b0aed6374c8455fd79987770bc755ce12713aae916a4 + md5: 69d8b100b4a9e557e33c06b0d3ba4772 + sha256: 2ec1bfb9ffbcdd880f60139d46df88e60cd8d0a404f4e0e498500671b34c1d5b manager: conda name: types-requests optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.2-pyhd8ed1ab_0.conda - version: 2.31.0.2 + url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.6-pyhd8ed1ab_0.conda + version: 2.31.0.6 - category: main dependencies: - typing_extensions: 4.7.1 pyha770c72_0 + typing_extensions: 4.9.0 pyha770c72_0 hash: - md5: f96688577f1faa58096d06a45136afa2 - sha256: d5d19b8f5b275240c19616a46d67ec57250b3720ba88200da8c732c3fcbfc21d + md5: c16524c1b7227dc80b36b4fa6f77cc86 + sha256: d795c1eb1db4ea147f01ece74e5a504d7c2e8d5ee8c11ec987884967dd938f9c manager: conda name: typing-extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda - version: 4.7.1 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.9.0-hd8ed1ab_0.conda + version: 4.9.0 +- category: main + dependencies: + brotli-python: '>=1.0.9' + pysocks: '>=1.5.6,<2.0,!=1.5.7' + python: '>=3.7' + hash: + md5: bf61cfd2a7f212efba378167a07d4a6a + sha256: 1cc0bab65a6ad0f5a8bd7657760a4fb4e670d30377f9dab88b792977cb3687e7 + manager: conda + name: urllib3 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.18-pyhd8ed1ab_0.conda + version: 1.26.18 - category: main dependencies: gettext: '>=0.21.1,<1.0a0' @@ -4046,30 +4247,45 @@ package: perl: '>=5.32.1,<5.33.0a0 *_perl5' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 - xorg-libx11: '>=1.8.6,<2.0a0' + xorg-libx11: '>=1.8.7,<2.0a0' xorg-libxt: '>=1.3.0,<2.0a0' hash: - md5: 31cdaa92553ca7a1822eab5859f49c68 - sha256: 7d9a6238161940f9953ae6489ef4b7f20b6dbec9ef1b4282c5ab4e4096b168a9 + md5: 554fab21708ab3d3c5a295c5206b5cbc + sha256: 624f3ada4f4cfcc5177a9d5a7ab1ec5f3fc11ef21737aa2d85888be761e5d166 manager: conda name: vim optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/vim-9.0.1435-py310pl5321he660f0e_0.conda - version: 9.0.1435 + url: https://conda.anaconda.org/conda-forge/linux-64/vim-9.0.2059-py310pl5321he660f0e_1.conda + version: 9.0.2059 +- category: main + dependencies: + distlib: <1,>=0.3.7 + filelock: <4,>=3.12.2 + platformdirs: <5,>=3.9.1 + python: '>=3.8' + hash: + md5: c119653cba436d8183c27bf6d190e587 + sha256: 50827c3721a9dbf973b568709d4381add2a6552fa562f26a385c5edc16a534af + manager: conda + name: virtualenv + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda + version: 20.25.0 - category: main dependencies: markupsafe: '>=2.1.1' python: '>=3.8' hash: - md5: e41528da0d8b8bbf4acc7255192132e3 - sha256: b426b0fcb6137ef858746ef86bddee7f0c881a9c84b67ed40b2feb1b5b47f5b6 + md5: af8d825d93dbe6331ee6d61c69869ca0 + sha256: b7ac49549d370a411b1d6150d24243a15adcce07f1c61ec2ea1b536346e47aa0 manager: conda name: werkzeug optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-2.3.7-pyhd8ed1ab_0.conda - version: 2.3.7 + url: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda + version: 3.0.1 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -4094,27 +4310,27 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 73deaf595eb21f3e76a02ba1ae2edee6 - sha256: 943c644a13a517d5ca9761e2c3f8697db85ea0c05a44e13697d826f7f5e1d351 + md5: 10246f66639d9ca55e790410f0dbb465 + sha256: 159e9e292f841477dd1e4c897c055d364472720c79b16fa329faee1e7b878564 manager: conda name: yarl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.2-py310h2372a71_0.conda - version: 1.9.2 + url: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.3-py310h2372a71_0.conda + version: 1.9.3 - category: main dependencies: python: '>=3.7' typing-extensions: '>=4.0.0' hash: - md5: 578ae086f225bc2380c79f3b551ff2f7 - sha256: bbabfd4400b03ba6c50d0a55e777e0c3ba900af8dabedb9b8aded774484b5d53 + md5: 997c29372bdbe2afee073dff71f35923 + sha256: 3a2c98154d95cfd54daba6b7d507d31f5ba07ac2ad955c44eb041b66563193cd manager: conda name: annotated-types optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.5.0-pyhd8ed1ab_0.conda - version: 0.5.0 + url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.6.0-pyhd8ed1ab_0.conda + version: 0.6.0 - category: main dependencies: python: '>=3.7' @@ -4130,19 +4346,38 @@ package: version: 4.0.3 - category: main dependencies: - cffi: '>=1.0.0' + aws-c-auth: '>=0.7.8,<0.7.9.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 + openssl: '>=3.2.0,<4.0a0' hash: - md5: 87669c3468dff637bbd0363bc0f895cf - sha256: a37f9a00170f48e71b67bb4547e8bf352dcee4e4a79a55f087b512022cc64a0d + md5: f27f792aa83c7be3ee96d09a637a6474 + sha256: 04142edf1a574e137a9e30a4f4e9b9448e219b6f4216a782ceaed933f27852a6 manager: conda - name: brotlipy + name: aws-c-s3 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotlipy-0.7.0-py310h5764c6d_1005.tar.bz2 - version: 0.7.0 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.4-h0448019_0.conda + version: 0.4.4 +- category: main + dependencies: + jmespath: '>=0.7.1,<2.0.0' + python: '>=3.8' + python-dateutil: '>=2.1,<3.0.0' + urllib3: '>=1.25.4,<1.27' + hash: + md5: d6850c205e9f86502bd6a58e270e8fd5 + sha256: ad25216fd91ac9a624ffde69679c3d476c4091adad30b9169aa3486bd25e1e88 + manager: conda + name: botocore + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 - category: main dependencies: clang-format-16: 16.0.3 default_h1cdf331_2 @@ -4197,16 +4432,16 @@ package: itsdangerous: '>=2.1.2' jinja2: '>=3.1.2' python: '>=3.8' - werkzeug: '>=2.3.7' + werkzeug: '>=3.0.0' hash: - md5: 9b0d29067484a8dfacfae85b8fba81bc - sha256: 4f84ffdc5471236e8225db86c7508426b46aa2c3802d58ca40b3c3e174533b39 + md5: d26105227a24c82fdf160f20ed379400 + sha256: 73dafd8c1ae9ee9e42e5fa78275c8dc3b456879d83dc6d6ed82d92bd498c9184 manager: conda name: flask optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/flask-2.3.3-pyhd8ed1ab_0.conda - version: 2.3.3 + url: https://conda.anaconda.org/conda-forge/noarch/flask-3.0.0-pyhd8ed1ab_0.conda + version: 3.0.0 - category: main dependencies: curl: '' @@ -4215,32 +4450,32 @@ package: libgcc-ng: '>=12' libiconv: '>=1.17,<2.0a0' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - pcre2: '>=10.40,<10.41.0a0' + openssl: '>=3.2.0,<4.0a0' + pcre2: '>=10.42,<10.43.0a0' perl: 5.* hash: - md5: 96ad24c67e0056d171385859c43218a2 - sha256: 6f6b3d60da46f53f1e1708a63d6ce5f119e6aba0f5243326b7ecaf3b0cdbc6d4 + md5: 851970792301b407ba4c35e75e796791 + sha256: 73a065e160d759e8fb0b169e615955a8fe0c148ed00c7f6ddf076f2e4adfd765 manager: conda name: git optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/git-2.42.0-pl5321h86e50cf_0.conda - version: 2.42.0 + url: https://conda.anaconda.org/conda-forge/linux-64/git-2.43.0-pl5321h7bc287a_0.conda + version: 2.43.0 - category: main dependencies: gitdb: '>=4.0.1,<5' python: '>=3.7' typing_extensions: '>=3.7.4.3' hash: - md5: 3c3d8c89c2fe64dc925ca492d67fab1a - sha256: e70b7c7c072f099af8ab004feb099f72e85f60fed2dc1e3dcedf166903ab9822 + md5: 6bf74c3b7c13079a91d4bd3da51cefcf + sha256: 6b85809ffbfe5c1887b674bf0492cc4dd1ac8a25f4d9fa20ef404be92186259b manager: conda name: gitpython optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.34-pyhd8ed1ab_0.conda - version: 3.1.34 + url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda + version: 3.1.40 - category: main dependencies: cairo: '>=1.16.0,<2.0a0' @@ -4261,34 +4496,30 @@ package: version: 7.3.0 - category: main dependencies: - importlib-metadata: '>=6.8.0,<6.8.1.0a0' + importlib-metadata: '>=7.0.1,<7.0.2.0a0' hash: - md5: b279b07ce18058034e5b3606ba103a8b - sha256: b96e01dc42d547d6d9ceb1c5b52a5232cc04e40153534350f702c3e0418a6b3f + md5: 4a2f43a20fa404b998859c6a470ba316 + sha256: bc362df1d4f5a04c38dff29cd9c2d0ac584f9c4b45d3e4683ee090944a38fba4 manager: conda name: importlib_metadata optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda - version: 6.8.0 + url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.1-hd8ed1ab_0.conda + version: 7.0.1 - category: main dependencies: - attrs: '>=17.4.0' - importlib-metadata: '' importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - pyrsistent: '!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0' - python: '>=3.7' - typing_extensions: '' + python: '>=3.8' + referencing: '>=0.25.0' hash: - md5: 723268a468177cd44568eb8f794e0d80 - sha256: 4f68a23430d1afc5c9b41c46fbac0ade33c0bf57a293c646bfdd6dc65350eada + md5: 7c27ea1bdbe520bb830dcadd59f55cbf + sha256: 7b0061e106674f27cc718f79a095e90a5667a3635ec6626dd23b3be0fd2bfbdc manager: conda - name: jsonschema + name: jsonschema-specifications optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda - version: 4.17.3 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda + version: 2023.7.1 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4304,106 +4535,62 @@ package: version: 0.0.0.20190110_28_ga81397fc4 - category: main dependencies: - certifi: '>=2020.06.20' - contourpy: '>=1.0.1' - cycler: '>=0.10' - fonttools: '>=4.22.0' - freetype: '>=2.12.1,<3.0a0' - kiwisolver: '>=1.0.1' + libblas: '>=3.9.0,<4.0a0' + libcblas: '>=3.9.0,<4.0a0' libgcc-ng: '>=12' + liblapack: '>=3.9.0,<4.0a0' libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' - packaging: '>=20.0' - pillow: '>=6.2.0' - pyparsing: '>=2.3.1,<3.1' python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.7' python_abi: 3.10.* *_cp310 - tk: '>=8.6.12,<8.7.0a0' hash: - md5: 9b55c9041c5a7f80f184a2cb05ec9663 - sha256: 28ff078d33e18b52a455d58d24ab7b959b4db98411470afd5869f30fbb54250b + md5: d3147cfbf72d6ae7bba10562208f6def + sha256: f5ea7769beb7827f4f5858d28bbdbc814c01649cb8cb81cccbba476ebe3798cd manager: conda - name: matplotlib-base + name: numpy optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py310hf38f957_0.conda - version: 3.7.2 -- category: main - dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - numpy: '>=1.22.4,<2.0a0' - python: '>=3.10,<3.11.0a0' - python-dateutil: '>=2.8.1' - python-tzdata: '>=2022a' - python_abi: 3.10.* *_cp310 - pytz: '>=2020.1' - hash: - md5: 6c92da4ec4e301d09a365c0584e632c8 - sha256: 6e545eeee4e7d223c0bd7efe6a1e5b6f054228e9bfd8b151b24c257fcfe0c893 - manager: conda - name: pandas - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py310hcc13569_0.conda - version: 2.1.0 + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py310hb13e2d6_0.conda + version: 1.26.2 - category: main dependencies: pip: '' python: '>=3.6' hash: - md5: 5bde4ebca51438054099b9527c904ecb - sha256: bb6b283c27a8293cfd6d439959da45e848e401130fe3b44e31cde8243fdebdee + md5: 8dbab5ba746ed14aa32cb232dc437f8f + sha256: 4c83853fc6349de163c2871613e064e5fdab91723db9b50bcda681adc05e4b87 manager: conda name: pbr optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda - version: 5.11.1 + url: https://conda.anaconda.org/conda-forge/noarch/pbr-6.0.0-pyhd8ed1ab_0.conda + version: 6.0.0 - category: main dependencies: - python: '>=3.7' - typing-extensions: '>=4.6.3' + prompt-toolkit: '>=3.0.38,<3.0.39.0a0' hash: - md5: 0809187ef9b89a3d94a5c24d13936236 - sha256: 1b5c0ca2f4260c7dd8cfccd8a641c1e41876c79dc594506be379cde08f5b471e + md5: 45b74f64d8808eda7e6f6e6b1d641fd2 + sha256: c0f24a75d27918eb33f86902aa6024783d128a89eb3a169bcb22f24163a422b3 manager: conda - name: platformdirs + name: prompt_toolkit optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda - version: 3.10.0 + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.38-hd8ed1ab_0.conda + version: 3.0.38 - category: main dependencies: libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 - typing-extensions: '>=4.2.0' + typing-extensions: '>=4.6.0,!=4.7.0' hash: - md5: 92818992253ff7f7ea4924785b1eadb9 - sha256: 6ab9ab48fec65d3ddbb7ed2249cd5fc01ba129aee1cdc65003ec79ee6a1e6778 - manager: conda - name: pydantic - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.12-py310h2372a71_1.conda - version: 1.10.12 -- category: main - dependencies: - libgcc-ng: '>=12' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 - typing-extensions: '>=4.6.0' - hash: - md5: cebe5d122c8b1902f6c0ca7e3c63344f - sha256: b6b097058ae9f378b9db07b2396d7baba8ccaf9c7f0666795caccdb69c36274a + md5: f0f6b7e4b3d134f070288963ed4fbeee + sha256: 3bdc1ef89f9e431392aec8ed5695d8aefc7b65a014cc46934f75e87779f89745 manager: conda name: pydantic-core optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.1.2-py310hcb5633a_0.conda - version: 2.1.2 + url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.14.6-py310hcb5633a_1.conda + version: 2.14.6 - category: main dependencies: cffi: '>=1.4.1' @@ -4413,13 +4600,13 @@ package: python_abi: 3.10.* *_cp310 six: '' hash: - md5: 61e89a7a37bee9dd72449733a9273ae2 - sha256: 187c844010404d7b6e21926c66301b03ed90de20d26021f7ee7965fa1e81f4d9 + md5: a29a0825809cd3a780097472be176618 + sha256: f47cc2039e555a03187defab05cf77cc28f56df1a820d789efad39a930994192 manager: conda name: pynacl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h5764c6d_2.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h2372a71_3.conda version: 1.5.0 - category: main dependencies: @@ -4437,29 +4624,45 @@ package: - category: main dependencies: pytest: '>=5.0' - python: '>=3.7' + python: '>=3.8' hash: - md5: fcd2531bc3e492657aeb042349aeaf8a - sha256: d2f6a46fe31dea91b427bcc57302edc345eb763caf3c6b6dcd09b2aee002324b + md5: ac9fedc9a0c397f2318e82525491dd83 + sha256: 58d3bd93a0cf9b51ac105de1e01b1fcd1fcfa5993023b67658344e329b02d6e0 manager: conda name: pytest-mock optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.11.1-pyhd8ed1ab_0.conda - version: 3.11.1 + url: https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.12.0-pyhd8ed1ab_0.conda + version: 3.12.0 +- category: main + dependencies: + certifi: '>=2017.4.17' + charset-normalizer: '>=2,<4' + idna: '>=2.5,<4' + python: '>=3.7' + urllib3: '>=1.21.1,<3' + hash: + md5: a30144e4156cdbb236f99ebb49828f8b + sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad + manager: conda + name: requests + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda + version: 2.31.0 - category: main dependencies: pip: '' python: '>=3.7,<4.0' hash: - md5: 6f590190c5393999bbc399ff15096bc3 - sha256: 000ed005cc95397866267072230e2f08407f5898ba2ac469200018492e73a875 + md5: aaafd70a6934549210865f558a0eee96 + sha256: 4e695e4d83cfc4ffd557cc2bdbecc0cedb9df8831d1a415b8e8c0e5f96bc6b5f manager: conda name: types-awscrt optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/types-awscrt-0.19.1-pyhd8ed1ab_0.conda - version: 0.19.1 + url: https://conda.anaconda.org/conda-forge/noarch/types-awscrt-0.20.0-pyhd8ed1ab_0.conda + version: 0.20.0 - category: main dependencies: cffi: '' @@ -4468,13 +4671,13 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: 703ff1ac7d1b27fb5944b8052b5d1edb - sha256: 3813d8579d5472cc182a56a6bf4c7b14085adfe0f7157af0d595efefb27b8e5c + md5: 35e87277fba9944b8a975113538bb5df + sha256: 7bcb662f8d8181d77d77605c6e176a5bc6a421025a8969c6d793fe47134285bd manager: conda name: ukkonen optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hd41b1e2_4.conda version: 1.0.1 - category: main dependencies: @@ -4495,25 +4698,25 @@ package: version: 1.2.3 - category: main dependencies: - cffi: '>=1.8' + cffi: '>=1.11' libgcc-ng: '>=12' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 + zstd: '>=1.5.5,<1.6.0a0' hash: - md5: 74ea667169b1296fb31bb86f13abfa49 - sha256: 958e22d2b24204e08ca0d64db55d63520583db99852cecc82d22c1a3832b23a2 + md5: 54698ba13cd3494547b289cd86a2176a + sha256: 1c1b91e5c5246b13ca25728ea6200dfd230d8ce8ca6910cd0b70fc5e43065a04 manager: conda name: zstandard optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.19.0-py310h5764c6d_0.tar.bz2 - version: 0.19.0 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py310h1275a96_0.conda + version: 0.22.0 - category: main dependencies: aiosignal: '>=1.1.2' - async-timeout: <5.0,>=4.0.0a3 + async-timeout: '>=4.0,<5.0' attrs: '>=17.3.0' - charset-normalizer: '>=2.0,<4.0' frozenlist: '>=1.1.1' libgcc-ng: '>=12' multidict: '>=4.5,<7.0' @@ -4521,28 +4724,95 @@ package: python_abi: 3.10.* *_cp310 yarl: '>=1.0,<2.0' hash: - md5: 0b05c509a96d0bf4bb424fe184170795 - sha256: 5cb7647fe64617424027125dab858b96cd0d7b91b1c39fbc7d508a500b7ba9c1 + md5: f367877549376e985a3df1dc430692ae + sha256: 6a3983f2ee81308ae0716790ae780f63915f47fcd6a1038d3c75a78fcb675f23 manager: conda name: aiohttp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.8.5-py310h2372a71_0.conda - version: 3.8.5 + url: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.1-py310h2372a71_0.conda + version: 3.9.1 +- category: main + dependencies: + botocore: '>=1.11.3' + python: '>=3.7' + wrapt: '' + hash: + md5: d457b2661051b833852509d2dc0c93db + sha256: 15384560a8df2c752a1a09588b7fe9c31f9edf96e0a5a9d7c07c547a37b9e95c + manager: conda + name: aws-xray-sdk + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/aws-xray-sdk-2.12.1-pyhd8ed1ab_0.conda + version: 2.12.1 +- category: main + dependencies: + aws-c-auth: '>=0.7.8,<0.7.9.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.10,<0.9.11.0a0' + aws-c-event-stream: '>=0.3.2,<0.3.3.0a0' + aws-c-http: '>=0.7.14,<0.7.15.0a0' + aws-c-io: '>=0.13.36,<0.13.37.0a0' + aws-c-mqtt: '>=0.9.10,<0.9.11.0a0' + aws-c-s3: '>=0.4.4,<0.4.5.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' + libgcc-ng: '>=12' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* *_cp310 + s2n: '>=1.4.0,<1.4.1.0a0' + hash: + md5: fd4b703083170315b3735e43967e3983 + sha256: bdab178420ff1e1dcf13407c662d355290bbad434844ed903029f98cd8afc29c + manager: conda + name: awscrt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/awscrt-0.19.19-py310h43b4219_2.conda + version: 0.19.19 +- category: main + dependencies: + python: '>=3.6' + requests: '>=2.18.4' + six: '>=1.11.0' + typing-extensions: '>=4.0.1' + hash: + md5: 6e97f7d5387626f896515442002ac920 + sha256: 3f3ec0617e825bcabb70722ace9153dfdc02895aebb2179fc20b82eb30f79ec8 + manager: conda + name: azure-core + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.5-pyhd8ed1ab_0.conda + version: 1.29.5 - category: main dependencies: python: '>=3.7,<4.0' types-awscrt: '' typing_extensions: '>=4.1.0' hash: - md5: 656a8ea23e1f7195e402ee126cd0e036 - sha256: 8533293be957aa444689d17c297207d3a76a3d75308f917edc13dc1703055b6a + md5: 75715c2695eb5d1da023a79140e923cd + sha256: e539bb5b339fc2136b086ce084fbf7b8c8f694d0c6ac30db2565c426bcdf28da manager: conda name: botocore-stubs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.31.41-pyhd8ed1ab_0.conda - version: 1.31.41 + url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 +- category: main + dependencies: + msgpack-python: '>=0.5.2' + python: '>=3.7' + requests: '>=2.16.0' + hash: + md5: 174bd699bb5aa9e2622eb4b288276ff8 + sha256: aae7ab3a54989f9bf9273e4a17c911ba339a8b9354250bc11fb8eff2e3f4be60 + manager: conda + name: cachecontrol + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.13.1-pyhd8ed1ab_0.conda + version: 0.13.1 - category: main dependencies: clang-format: 16.0.3 default_h1cdf331_2 @@ -4573,6 +4843,38 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda version: 0.9.0 +- category: main + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.20,<2' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* *_cp310 + hash: + md5: 85d2aaa7af046528d339da1e813c3a9f + sha256: 73dd7868bfd98fa9e4d2cc524687b5c5c8f9d427d4e521875aacfe152eae4715 + manager: conda + name: contourpy + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda + version: 1.2.0 +- category: main + dependencies: + appdirs: '' + click: '>=5.1' + filelock: '' + python: '>=3.7' + requests: '>=2' + hash: + md5: c99ae3abf501990769047b4b40a98f17 + sha256: b71784b6c24d2320b2f796d074e75e7dd1be7b7fc0f719c5cf3a582270b368d6 + manager: conda + name: ensureconda + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/ensureconda-1.4.3-pyhd8ed1ab_0.tar.bz2 + version: 1.4.3 - category: main dependencies: flask: '>=0.9' @@ -4592,43 +4894,61 @@ package: python: '>=3.6' ukkonen: '' hash: - md5: 6fbde8d3bdd1874132a1b26a3554b22c - sha256: 5aece5a948e881e2450be73002e52cd27df089b6ea64416f7694304307f66bd2 + md5: 93c8f8ceb83827d88deeba796f07fba7 + sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f manager: conda name: identify optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda - version: 2.5.27 + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda + version: 2.5.33 - category: main dependencies: importlib_metadata: '' - python: 2.7.*|>=3.5 + python: '>=3.7' hash: - md5: 35f19fabdfd44c8b53889be95333848c - sha256: d497c6f3b064d3dd8b76f277ea8d6a507acfe8cb04e31811baf66d8c533b8c08 + md5: f351864256e291b24b5a3bedda184bff + sha256: c947f2a64e4f06c722973894afb8e26df3aa2212e2e742def3506ccbad42141b manager: conda name: jsonpickle optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonpickle-2.2.0-pyhd8ed1ab_0.tar.bz2 - version: 2.2.0 + url: https://conda.anaconda.org/conda-forge/noarch/jsonpickle-3.0.2-pyhd8ed1ab_1.conda + version: 3.0.2 - category: main dependencies: - jsonschema: '>=4.0.0,<4.18.0' - pathable: '>=0.4.1,<0.5.0' - python: '>=3.6' - pyyaml: '>=5.1' - typing_extensions: '>=4.3.0,<5.0.0' + attrs: '>=22.2.0' + importlib_resources: '>=1.4.0' + jsonschema-specifications: '>=2023.03.6' + pkgutil-resolve-name: '>=1.3.10' + python: '>=3.8' + referencing: '>=0.28.4' + rpds-py: '>=0.7.1' hash: - md5: eff09facc908d5619097edd090678347 - sha256: 9ed0cbf1fec505c4ed2238453b42c964f8f85baa30490daeb84dbf5afd65c0b1 + md5: 1116d79def5268414fb0917520b2bbf1 + sha256: 77aae609097d06deedb8ef8407a44b23d5fef95962ba6fe1c959ac7bd6195296 manager: conda - name: jsonschema-spec + name: jsonschema optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-spec-0.1.4-pyhd8ed1ab_0.conda - version: 0.1.4 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda + version: 4.20.0 +- category: main + dependencies: + pathable: '>=0.4.1,<0.5.0' + python: '>=3.8.0' + pyyaml: '>=5.1' + referencing: '>=0.28.0,<0.31.0' + requests: '>=2.31.0,<3.0.0' + hash: + md5: 397d8d6ea406285f184534976f5bc9ae + sha256: 37d650a156a086a113be9ae917ba9737000be54e8939edd25e8d9f6fdd208bf2 + manager: conda + name: jsonschema-path + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-path-0.3.2-pyhd8ed1ab_0.conda + version: 0.3.2 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4645,19 +4965,19 @@ package: version: 0.0.0.20190110_28_ga81397fc4 - category: main dependencies: - attrs: '>=19.2.0' - jsonschema: '>=4.0.0,<4.18.0' - python: '>=3.7' - rfc3339-validator: '' + cryptography: <44,>=0.6 + pyjwt: <3,>=1.0.0 + python: '>=3.6' + requests: <3,>=2.0.0 hash: - md5: 6294c4a75fdeeca454e99abbea3f250a - sha256: 6b6fff6441e2673a822793776217f1c07d595ad7a73e7b631c7aeb8ac6663041 + md5: 9d9b0ef23f5dbe0d612ca037b9bfb410 + sha256: e0eb5606b4a164964d663d7a215ac9cd18db1ce1eca544aa61348e0a2bda94a9 manager: conda - name: openapi-schema-validator + name: msal optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.4.4-pyhd8ed1ab_0.conda - version: 0.4.4 + url: https://conda.anaconda.org/conda-forge/noarch/msal-1.26.0-pyhd8ed1ab_0.conda + version: 1.26.0 - category: main dependencies: alsa-lib: '>=1.2.9,<1.2.10.0a0' @@ -4688,6 +5008,25 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/openjdk-20.0.0-h8e330f5_0.conda version: 20.0.0 +- category: main + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.10,<3.11.0a0' + python-dateutil: '>=2.8.1' + python-tzdata: '>=2022a' + python_abi: 3.10.* *_cp310 + pytz: '>=2020.1' + hash: + md5: 410f7e83992a591e492c25049a859254 + sha256: d0743541397140a25a89ab0686933005a4c104d95c23ff1c322f903a50b18099 + manager: conda + name: pandas + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py310hcc13569_0.conda + version: 2.1.4 - category: main dependencies: cairo: '>=1.16.0,<2.0a0' @@ -4715,27 +5054,42 @@ package: pynacl: '>=1.5' python: '>=3.6' hash: - md5: 8d4563992b27cdb8e673d1ca16962c9d - sha256: 9139c13cb7ea5729af862db5fb0523daa5900b9b4fa36637cd7f9c01be665f80 + md5: a5e792523b028b06d7ce6e65a6cd4a33 + sha256: 2e66359261954a79b66858c30e69ea6dd4380bf8bd733940527386b25e31dd13 manager: conda name: paramiko optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.3.1-pyhd8ed1ab_0.conda - version: 3.3.1 + url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda + version: 3.4.0 - category: main dependencies: - cryptography: '>=38.0.0,<42,!=40.0.0,!=40.0.1' + annotated-types: '>=0.4.0' + pydantic-core: 2.14.6 + python: '>=3.7' + typing-extensions: '>=4.6.1' + hash: + md5: 3569001fd8b37e542aaefdf5de124e19 + sha256: 07ec778cbf17737b740f0547fb5cba91a7bff52945fe637287458e4119c58ffe + manager: conda + name: pydantic + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.5.3-pyhd8ed1ab_0.conda + version: 2.5.3 +- category: main + dependencies: + cryptography: '>=38.0.0,<41' python: '>=3.6' hash: - md5: 34f7d568bf59d18e3fef8c405cbece21 - sha256: 4daea3dc896987cc1334956fccfc0ed738663a84ad0c1d3f576a7a7936091534 + md5: 0b34aa3ab7e7ccb1765a03dd9ed29938 + sha256: 458428cb867f70f2af2a4ed59d382291ea3eb3f10490196070a15d1d71d5432a manager: conda name: pyopenssl optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda - version: 23.2.0 + url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.1.1-pyhd8ed1ab_0.conda + version: 23.1.1 - category: main dependencies: cryptography: '' @@ -4752,6 +5106,36 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/python-jose-3.3.0-pyh6c4a22f_1.tar.bz2 version: 3.3.0 +- category: main + dependencies: + python: '>=3.7' + pyyaml: '' + requests: '>=2.30.0,<3.0' + types-pyyaml: '' + typing_extensions: '' + urllib3: '>=1.25.10,<3.0' + hash: + md5: b1b80aaa77d5e83183cd0c9e9025b1fa + sha256: 35a1cc20beca329bfa2b17feeb5ca66a2741bdccf39621dfe386f48206e73d67 + manager: conda + name: responses + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/responses-0.24.1-pyhd8ed1ab_0.conda + version: 0.24.1 +- category: main + dependencies: + botocore: '>=1.33.2,<2.0a.0' + python: '>=3.8' + hash: + md5: 2d52125a7fe49248ce5e883fed6c935a + sha256: 5f1fccbbc0460971f12dda7ab0465d8f6037486042d156b611881e57d218ce95 + manager: conda + name: s3transfer + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.0-pyhd8ed1ab_0.conda + version: 0.10.0 - category: main dependencies: attrs: '' @@ -4774,13 +5158,13 @@ package: python: '>=3.10,<3.11.0a0' python_abi: 3.10.* *_cp310 hash: - md5: e135d0e3bbb226e8d53d31b4e4f6d93c - sha256: 25d2a00bf24a3cab81eba8f77eba8f70a7b3995041fc227f535c0f174536670f + md5: 4ccc40bc490af727cfbf3e7f0289d9bd + sha256: a2b7f56b07b6e95bd05fd47ebe5b2cfc8af70ccd04994623f6508e90d3b5f857 manager: conda name: secretstorage optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py310hff52083_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py310hff52083_2.conda version: 3.3.3 - category: main dependencies: @@ -4798,19 +5182,58 @@ package: version: 3.3.1 - category: main dependencies: - distlib: <1,>=0.3.7 - filelock: <4,>=3.12.2 - platformdirs: <4,>=3.9.1 - python: '>=3.8' + awscrt: '>=0.19.18,<=0.19.19' + colorama: '>=0.2.5,<0.4.7' + cryptography: '>=3.3.2,<=40.0.2' + distro: '>=1.5.0,<1.9.0' + docutils: '>=0.10,<0.20' + jmespath: '>=0.7.1,<1.1.0' + prompt_toolkit: '>=3.0.24,<3.0.39' + pyopenssl: <23.2 + python: '>=3.10,<3.11.0a0' + python-dateutil: '>=2.1,<3.0.0' + python_abi: 3.10.* *_cp310 + ruamel.yaml: '>=0.15.0,<=0.17.21' + ruamel.yaml.clib: '>=0.2.0,<=0.2.7' + urllib3: '>=1.25.4,<1.27' hash: - md5: c3feaf947264a59a125e8c26e98c3c5a - sha256: 85c96449202ca87ec12783d8675b3655b4cd7b7afe49f2dc37d743adb0ed177f + md5: 80d2f2f27aafd39e4b8134e9ee9ab312 + sha256: 943e8710df413e02b1d017c462b1b5e976f44751f51e07851b30917d6b63b44f manager: conda - name: virtualenv + name: awscli optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda - version: 20.24.4 + url: https://conda.anaconda.org/conda-forge/linux-64/awscli-2.15.6-py310hff52083_0.conda + version: 2.15.6 +- category: main + dependencies: + botocore: '>=1.34.11,<1.35.0' + jmespath: '>=0.7.1,<2.0.0' + python: '>=3.8' + s3transfer: '>=0.10.0,<0.11.0' + hash: + md5: b1256264fc531fca35aabab7d517438a + sha256: b4d3415b4beee1623c02b7ddc593ae7ca5c5843c943424a73b7648e05858e008 + manager: conda + name: boto3 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 +- category: main + dependencies: + cachecontrol: 0.13.1 pyhd8ed1ab_0 + filelock: '>=3.8.0' + python: '>=3.7' + hash: + md5: 8c4781ca0893cff3a64423954ce234a1 + sha256: 7fd3cd4a667da284ae3aad9b8cb4d592099bc02ed6566cbae00bd8c0b0604e85 + manager: conda + name: cachecontrol-with-filecache + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.13.1-pyhd8ed1ab_0.conda + version: 0.13.1 - category: main dependencies: conda-package-streaming: '>=0.9.0' @@ -4825,6 +5248,24 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda version: 2.2.0 +- category: main + dependencies: + packaging: '>=14.0' + paramiko: '>=2.4.3' + python: '>=3.7' + pywin32-on-windows: '' + requests: '>=2.26.0' + urllib3: '>=1.26.0' + websocket-client: '>=0.32.0' + hash: + md5: aec5f308cb9055e83c59afecd5fcb58a + sha256: b9bf5990dc968123e5817096daddd2105857cfd4c5b94c0937d929bc74fc7a31 + manager: conda + name: docker-py + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/docker-py-7.0.0-pyhd8ed1ab_0.conda + version: 7.0.0 - category: main dependencies: atk-1.0: '>=2.36.0' @@ -4867,14 +5308,14 @@ package: python_abi: 3.10.* *_cp310 secretstorage: '>=3.2' hash: - md5: c6138432d67b31a98a55af46b3f693c1 - sha256: d01df199b2db95622e6b0b87128239e60c4a170f46e9b58fdfde15f948515dfd + md5: e710fd8e57356a64cace034413da9cb3 + sha256: 886a764e4bc2cfaabf2ea0a98461fbd526affd99c984a2789770eca43dd17c9b manager: conda name: keyring optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/keyring-24.2.0-py310hff52083_0.conda - version: 24.2.0 + url: https://conda.anaconda.org/conda-forge/linux-64/keyring-24.3.0-py310hff52083_0.conda + version: 24.3.0 - category: main dependencies: cairo: '>=1.16.0,<2.0a0' @@ -4895,372 +5336,31 @@ package: version: 2.56.0 - category: main dependencies: - importlib_resources: '>=5.8.0,<6.0.0' - jsonschema: '>=4.0.0,<4.18.0' - jsonschema-spec: '>=0.1.1,<0.2.0' - lazy-object-proxy: '>=1.7.1,<2.0.0' - openapi-schema-validator: '>=0.4.2,<0.5' - python: '>=3.7' - typing_extensions: '' - hash: - md5: 365a6ba8516ec76591f32918895502d5 - sha256: 6364d948b9215a15a0482eafab725d9acdad6d03c744501c8fdedfac0d8e12ff - manager: conda - name: openapi-spec-validator - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.5.7-pyhd8ed1ab_0.conda - version: 0.5.7 -- category: main - dependencies: - cfgv: '>=2.0.0' - identify: '>=1.0.0' - nodeenv: '>=0.11.1' - python: '>=3.8' - pyyaml: '>=5.1' - virtualenv: '>=20.10.0' - hash: - md5: f0fe759dc1dc02722c15cfb5faa1172b - sha256: 7adddcb9b5651fe5ed08a8438f2c967ac126c8b3fa854376a9a6f97511810c6a - manager: conda - name: pre-commit - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_0.conda - version: 3.4.0 -- category: main - dependencies: - __unix: '' - openjdk: '>=8' - hash: - md5: a46fac25dff2221c873bfceab88fcb47 - sha256: 08012e6a1ab95c56b86fe76ca76d236db8aa60f6cb4a47db6ef307671aeb2c1b - manager: conda - name: sbt - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/sbt-1.9.4-h707e725_0.conda - version: 1.9.4 -- category: main - dependencies: - brotlipy: '>=0.6.0' - certifi: '' - cryptography: '>=1.3.4' - idna: '>=2.0.0' - pyopenssl: '>=0.14' - pysocks: '>=1.5.6,<2.0,!=1.5.7' - python: <4.0 - hash: - md5: 27db656619a55d727eaf5a6ece3d2fd6 - sha256: 213bdf6c3a5d721fa83b45d527d3ecd340f9547c0d6bbd0b8d9d746ec9a1fb4b - manager: conda - name: urllib3 - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.15-pyhd8ed1ab_0.conda - version: 1.26.15 -- category: main - dependencies: - jmespath: '>=0.7.1,<2.0.0' - python: '>=3.7' - python-dateutil: '>=2.1,<3.0.0' - urllib3: '>=1.25.4,<1.27' - hash: - md5: 157c6bb045111f1b4f68e16df9251e7e - sha256: ab65ee4c7f97d8072f25891c8329ad54dece85fefc5053e31266275ea6db637c - manager: conda - name: botocore - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.31.41-pyhd8ed1ab_0.conda - version: 1.31.41 -- category: main - dependencies: - cairo: '>=1.16.0,<2.0a0' - expat: '' - fontconfig: '>=2.14.2,<3.0a0' - fonts-conda-ecosystem: '' + certifi: '>=2020.06.20' + contourpy: '>=1.0.1' + cycler: '>=0.10' + fonttools: '>=4.22.0' freetype: '>=2.12.1,<3.0a0' - gdk-pixbuf: '>=2.42.10,<3.0a0' - gtk2: '' - gts: '>=0.7.6,<0.8.0a0' - libexpat: '>=2.5.0,<3.0a0' + kiwisolver: '>=1.3.1' libgcc-ng: '>=12' - libgd: '>=2.3.3,<2.4.0a0' - libglib: '>=2.76.2,<3.0a0' - librsvg: '>=2.56.0,<3.0a0' libstdcxx-ng: '>=12' - libtool: '' - libwebp-base: '>=1.3.0,<2.0a0' - libzlib: '>=1.2.13,<1.3.0a0' - pango: '>=1.50.14,<2.0a0' - zlib: '' - hash: - md5: 597e2d0e1c6bc2e4457714ff479fe142 - sha256: 4bfb42de2d28406666ef6729169cae3f49c216c5ebd9f34afa40223755e2aaf8 - manager: conda - name: graphviz - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.0.5-h28d9a01_0.conda - version: 8.0.5 -- category: main - dependencies: - certifi: '>=2017.4.17' - charset-normalizer: '>=2,<4' - idna: '>=2.5,<4' - python: '>=3.7' - urllib3: '>=1.21.1,<3' - hash: - md5: a30144e4156cdbb236f99ebb49828f8b - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - manager: conda - name: requests - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - version: 2.31.0 -- category: main - dependencies: - botocore: '>=1.11.3' - python: '>=3.4' - wrapt: '' - hash: - md5: a9f8851a7aad0fa6ec843b1beb95decf - sha256: ad37f3f8a6653fb91354716adec29dfb9f5917b7aa06d77f33af8ea7947eb116 - manager: conda - name: aws-xray-sdk - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/aws-xray-sdk-2.12.0-pyhd8ed1ab_0.conda - version: 2.12.0 -- category: main - dependencies: - python: '>=3.6' - requests: '>=2.18.4' - six: '>=1.11.0' - typing-extensions: '>=4.0.1' - hash: - md5: d336f70469313f6c1eaf3c645b071961 - sha256: 826fb6bf9e20fd7afa4ec971ad0c343cc39b7bd872709d3c4d11a0c397006ed6 - manager: conda - name: azure-core - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.3-pyhd8ed1ab_0.conda - version: 1.29.3 -- category: main - dependencies: - msgpack-python: '>=0.5.2' - python: '>=3.7' - requests: '>=2.16.0' - hash: - md5: 174bd699bb5aa9e2622eb4b288276ff8 - sha256: aae7ab3a54989f9bf9273e4a17c911ba339a8b9354250bc11fb8eff2e3f4be60 - manager: conda - name: cachecontrol - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.13.1-pyhd8ed1ab_0.conda - version: 0.13.1 -- category: main - dependencies: - boltons: '>=23.0.0' - conda-package-handling: '>=1.3.0' - jsonpatch: '>=1.32' - packaging: '>=23.0' - pluggy: '>=1.0.0' - pycosat: '>=0.6.3' - pyopenssl: '>=16.2.0' + numpy: '>=1.22.4,<2.0a0' + packaging: '>=20.0' + pillow: '>=8' + pyparsing: '>=2.3.1' python: '>=3.10,<3.11.0a0' + python-dateutil: '>=2.7' python_abi: 3.10.* *_cp310 - requests: '>=2.27.0,<3' - ruamel.yaml: '>=0.11.14,<0.18' - setuptools: '>=60.0.0' - toolz: '>=0.8.1' - tqdm: '>=4' + tk: '>=8.6.13,<8.7.0a0' hash: - md5: f31c3517413898e0429d44a1c848f1fd - sha256: 111119742c7e25b6241c89a026f07c11d4668e6a6f1ce21216ed322a549b09e8 + md5: 3cbbc7d0b54df02c9a006d3de14911d9 + sha256: 078f5f1ece533a03710dd6d644555f1f2f4cbe18f1412d695ffb304e3d8c9381 manager: conda - name: conda + name: matplotlib-base optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/conda-23.7.3-py310hff52083_0.conda - version: 23.7.3 -- category: main - dependencies: - packaging: '>=14.0' - paramiko: '>=2.4.3' - python: '>=3.7' - pywin32-on-windows: '' - requests: '>=2.26.0' - urllib3: '>=1.26.0' - websocket-client: '>=0.32.0' - hash: - md5: c95d23d8bae7e21491868cc7772d7c73 - sha256: 7c3031602e92fd7682302ef98a45bdf7374d48a849cdd3900b7c68a32d162177 - manager: conda - name: docker-py - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/docker-py-6.1.3-pyhd8ed1ab_0.conda - version: 6.1.3 -- category: main - dependencies: - appdirs: '' - click: '>=5.1' - filelock: '' - python: '>=3.7' - requests: '>=2' - hash: - md5: c99ae3abf501990769047b4b40a98f17 - sha256: b71784b6c24d2320b2f796d074e75e7dd1be7b7fc0f719c5cf3a582270b368d6 - manager: conda - name: ensureconda - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/ensureconda-1.4.3-pyhd8ed1ab_0.tar.bz2 - version: 1.4.3 -- category: main - dependencies: - cryptography: '>=0.6,<44' - pyjwt: '>=1.0.0,<3' - python: '>=3.6' - requests: '>=2.0.0,<3' - hash: - md5: 4af1ca41814694c1028c4f1b1f88c38f - sha256: 50f80fe167d5ca5be572174f3fcad4f4cef225dcf1feccc88fbaf3d661fe15c9 - manager: conda - name: msal - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/msal-1.23.0-pyhd8ed1ab_0.conda - version: 1.23.0 -- category: main - dependencies: - graphviz: '>=2.46.1' - python: '>=3' - hash: - md5: 196447bc6fd769c3eb2d51de1aa866a5 - sha256: 55e25bf761438b6b52e67ed06d3e5575445177a58636e873a9899aa7fd9c8585 - manager: conda - name: python-graphviz - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.1-pyh22cad53_0.tar.bz2 - version: 0.20.1 -- category: main - dependencies: - python: '>=3.7' - pyyaml: '' - requests: '>=2.22.0,<3.0' - types-pyyaml: '' - typing_extensions: '' - urllib3: '>=1.25.10' - hash: - md5: bf15c93720dfea117aaea3155cbebce5 - sha256: c64db4a71de87e17fbcbd0b3af2186ab25d65428bb565bd7d070850324096f3b - manager: conda - name: responses - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/responses-0.23.1-pyhd8ed1ab_0.conda - version: 0.23.1 -- category: main - dependencies: - botocore: '>=1.12.36,<2.0a.0' - python: '>=3.7' - hash: - md5: f57096b122c78f7d8bd6885f52db1077 - sha256: 636453288a2436016235b86ec9bdf6c965aabe2114a68c51809874014255db71 - manager: conda - name: s3transfer - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.6.2-pyhd8ed1ab_0.conda - version: 0.6.2 -- category: main - dependencies: - botocore: 1.31.41 - colorama: '>=0.2.5,<0.4.5' - docutils: '>=0.10,<0.17' - python: '>=3.10,<3.11.0a0' - python_abi: 3.10.* *_cp310 - pyyaml: '>=3.10,<6.1' - rsa: '>=3.1.2,<4.8' - s3transfer: '>=0.6.0,<0.7.0' - hash: - md5: 576254ebc0d459740aadfe1ee0e9a604 - sha256: 4cc5957518f5cf5f1693bbc55f1184a2e1f2a45e1d47cb90613c55a3ad9a88ba - manager: conda - name: awscli - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/awscli-1.29.41-py310hff52083_0.conda - version: 1.29.41 -- category: main - dependencies: - botocore: '>=1.31.41,<1.32.0' - jmespath: '>=0.7.1,<2.0.0' - python: '>=3.7' - s3transfer: '>=0.6.0,<0.7.0' - hash: - md5: 904d83242795391e42132fba9ce95884 - sha256: 1766d30554de4c2cda01284620c69e9306d14329bfd1b60324c25668dfa36a18 - manager: conda - name: boto3 - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.28.41-pyhd8ed1ab_0.conda - version: 1.28.41 -- category: main - dependencies: - cachecontrol: 0.13.1 pyhd8ed1ab_0 - filelock: '>=3.8.0' - python: '>=3.7' - hash: - md5: 8c4781ca0893cff3a64423954ce234a1 - sha256: 7fd3cd4a667da284ae3aad9b8cb4d592099bc02ed6566cbae00bd8c0b0604e85 - manager: conda - name: cachecontrol-with-filecache - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.13.1-pyhd8ed1ab_0.conda - version: 0.13.1 -- category: main - dependencies: - colorama: '' - conda: '' - networkx: '' - python: '>=3.6' - hash: - md5: 184216409957e082712d750862782903 - sha256: 54e9cf114ca4eaeda91b5bb11a09d4391ba4be8a4fb2911259fc7dc2ec636054 - manager: conda - name: conda-tree - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/conda-tree-1.1.0-pyhd8ed1ab_2.conda - version: 1.1.0 -- category: main - dependencies: - __unix: '' - conda: '>=4.6' - conda-standalone: '' - jinja2: '' - pillow: '>=3.1' - python: '>=3.7' - ruamel.yaml: '>=0.11.14,<0.18' - hash: - md5: 874c9c92cfcb27369d5620eb65f9ec9c - sha256: cad7b6bdf433da141dabcbb7c138e8665db20382e000ff9629b6d0c9141528b0 - manager: conda - name: constructor - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/constructor-3.4.5-pyh55f8243_0.conda - version: 3.4.5 + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py310h62c0568_0.conda + version: 3.8.2 - category: main dependencies: msal: '>=0.4.1,<2.0' @@ -5277,51 +5377,121 @@ package: version: 1.0.0 - category: main dependencies: - boto3: '>=1.19.5,<2' - jsonschema: '>=3.2,<5' - pydantic: ~=1.10.2 - python: '>=3.7' - typing_extensions: '>=4.4.0,<5' + jsonschema: '>=4.19.1,<5.0.0a0' + jsonschema-specifications: '>=2023.5.2,<2024.0.0' + python: '>=3.8' + rfc3339-validator: '' hash: - md5: 2f1c7e055a216b95454484d831cc60b3 - sha256: ad418000db6c5105416a87be77026944450cd5b922dd46da0d39782fad35ba33 + md5: 86794cb397bb1b311da59f9ac232b0c8 + sha256: 184ab5d662741d549e5bdc3ea75846ed9a5d0ae2072d9b970d92ab0e4fbe6145 + manager: conda + name: openapi-schema-validator + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.6.2-pyhd8ed1ab_0.conda + version: 0.6.2 +- category: main + dependencies: + cfgv: '>=2.0.0' + identify: '>=1.0.0' + nodeenv: '>=0.11.1' + python: '>=3.9' + pyyaml: '>=5.1' + virtualenv: '>=20.10.0' + hash: + md5: 473a7cfca197da0a10cff3f6dded7d4b + sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 + manager: conda + name: pre-commit + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda + version: 3.6.0 +- category: main + dependencies: + __unix: '' + openjdk: '>=8' + hash: + md5: b6f6329c1a8a1efaaf16024e545335f5 + sha256: f5588175723814ad220d6dad75771d7139c293df802ce871ab2b89a629250013 + manager: conda + name: sbt + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/sbt-1.9.7-hd8ed1ab_0.conda + version: 1.9.7 +- category: main + dependencies: + boto3: '>=1.19.5' + jsonschema: <5,>=3.2 + pydantic: '>=1.8,<3' + python: '>=3.7,<4.0' + typing-extensions: <5,>=4.4 + hash: + md5: 9fabf343ed3cdb5803480768e6338826 + sha256: 6cdad8582e270b88147295e9ec4817bdcda14212098efa77165a96870a31bbf4 manager: conda name: aws-sam-translator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.73.0-pyhd8ed1ab_0.conda - version: 1.73.0 + url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.82.0-pyhd8ed1ab_0.conda + version: 1.82.0 - category: main dependencies: - azure-core: '>=1.11.0,<2.0.0' + azure-core: <2.0.0,>=1.23.0 cryptography: '>=2.5' - msal: '>=1.12.0,<2.0.0' - msal_extensions: '>=0.3.0,<2.0.0' + msal: <2.0.0,>=1.24.0 + msal_extensions: <2.0.0,>=0.3.0 python: '>=3.7' - six: '>=1.12' hash: - md5: 221a093ddca5e5abf2090a68dd964266 - sha256: af18f4cc9305c849e5ebbaa5cab69bc546c1d8a67accaf2e7bdeb39ab6f75f6f + md5: d1ef208ae2a355e5bb9cdce337644ce9 + sha256: a7a80ce603b0b2af0670e676b0ce96cc3fddd7c59f8f2c4d5767f5cfda7a74e9 manager: conda name: azure-identity optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/azure-identity-1.12.0-pyhd8ed1ab_0.tar.bz2 - version: 1.12.0 + url: https://conda.anaconda.org/conda-forge/noarch/azure-identity-1.15.0-pyhd8ed1ab_0.conda + version: 1.15.0 - category: main dependencies: boto3: '' python: '' typing_extensions: '' hash: - md5: 772310fe036b21f322cfafff4e3c8169 - sha256: 8695b9bc5fcab93aed3b1aa5bda8f3922340bc10a14088fa623470db4c9a558d + md5: 8e4b38b9dfc865ffb06a2bf2f3719d91 + sha256: e8d31daecb364f893495430612721bb7b8f240e0834be5d1226810ace22cde68 manager: conda name: boto3-stubs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/boto3-stubs-1.28.41-pyhd8ed1ab_0.conda - version: 1.28.41 + url: https://conda.anaconda.org/conda-forge/noarch/boto3-stubs-1.34.11-pyhd8ed1ab_0.conda + version: 1.34.11 +- category: main + dependencies: + archspec: '' + boltons: '>=23.0.0' + conda-package-handling: '>=2.2.0' + jsonpatch: '>=1.32' + packaging: '>=23.0' + pluggy: '>=1.0.0' + pycosat: '>=0.6.3' + pyopenssl: '>=16.2.0' + python: '>=3.10,<3.11.0a0' + python_abi: 3.10.* *_cp310 + requests: '>=2.27.0,<3' + ruamel.yaml: '>=0.11.14,<0.18' + setuptools: '>=60.0.0' + tqdm: '>=4' + truststore: '>=0.8.0' + hash: + md5: 43a598dea1812d249e2d6b8c12e8634f + sha256: 7c9916213879ded1142f95f058ec52da512bae7994105a35470aea66204c1683 + manager: conda + name: conda + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/conda-23.9.0-py310hff52083_2.conda + version: 23.9.0 - category: main dependencies: cachecontrol-with-filecache: '>=0.12.9' @@ -5358,32 +5528,79 @@ package: version: 1.4.0 - category: main dependencies: - boto3: '' - python: '>=3.6' - typing-extensions: '' + cairo: '>=1.16.0,<2.0a0' + expat: '' + fontconfig: '>=2.14.2,<3.0a0' + fonts-conda-ecosystem: '' + freetype: '>=2.12.1,<3.0a0' + gdk-pixbuf: '>=2.42.10,<3.0a0' + gtk2: '' + gts: '>=0.7.6,<0.8.0a0' + libexpat: '>=2.5.0,<3.0a0' + libgcc-ng: '>=12' + libgd: '>=2.3.3,<2.4.0a0' + libglib: '>=2.76.2,<3.0a0' + librsvg: '>=2.56.0,<3.0a0' + libstdcxx-ng: '>=12' + libtool: '' + libwebp-base: '>=1.3.0,<2.0a0' + libzlib: '>=1.2.13,<1.3.0a0' + pango: '>=1.50.14,<2.0a0' + zlib: '' hash: - md5: 7654bffc34df00bef7662f5aaede6024 - sha256: 0bb7792dbb38eaf3a75fe5ae547aaf62197b140feb5a624e80adc028f9fbc864 + md5: 597e2d0e1c6bc2e4457714ff479fe142 + sha256: 4bfb42de2d28406666ef6729169cae3f49c216c5ebd9f34afa40223755e2aaf8 manager: conda - name: mypy-boto3-s3 + name: graphviz optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/mypy-boto3-s3-1.28.36-pyhd8ed1ab_0.conda - version: 1.28.36 + url: https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.0.5-h28d9a01_0.conda + version: 8.0.5 - category: main dependencies: boto3: '' python: '>=3.6' typing-extensions: '' hash: - md5: 8678482bae631d4af00874831dbe4798 - sha256: 72f952beb3209ea9cfb20011c26e6239c38b14fdafc216fa773eec4b644db326 + md5: 768ff0d711180b901b1490ebe7010ada + sha256: 9482dd403e24f5e5c155624de7d89f5521a97e8130f0a014899b12486a331a85 + manager: conda + name: mypy-boto3-s3 + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/mypy-boto3-s3-1.34.0-pyhd8ed1ab_0.conda + version: 1.34.0 +- category: main + dependencies: + boto3: '' + python: '>=3.6' + typing-extensions: '' + hash: + md5: a810296f4cdd969085c1c3d78c846588 + sha256: 3975c31a2c88ff9925922537bb653f84a1c91ed5152043788bc8cc49d541951d manager: conda name: mypy_boto3_ec2 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/mypy_boto3_ec2-1.28.41-pyhd8ed1ab_0.conda - version: 1.28.41 + url: https://conda.anaconda.org/conda-forge/noarch/mypy_boto3_ec2-1.34.4-pyhd8ed1ab_0.conda + version: 1.34.4 +- category: main + dependencies: + importlib_resources: '>=5.8,<7.0' + jsonschema: '>=4.18.0,<5.0.0' + jsonschema-path: '>=0.3.1,<0.4.0' + lazy-object-proxy: '>=1.7.1,<2.0.0' + openapi-schema-validator: '>=0.6.0,<0.7.0' + python: '>=3.8.0' + hash: + md5: 01d3b50ae6ec011c99b043388fc3148d + sha256: b3aff38febb575647f1b5ad246dc4a9f221e3f712027a71be6e2554c3fe44220 + manager: conda + name: openapi-spec-validator + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.7.1-pyhd8ed1ab_0.conda + version: 0.7.1 - category: main dependencies: boto3: '' @@ -5400,26 +5617,72 @@ package: version: 0.4.2 - category: main dependencies: - aws-sam-translator: '>=1.73.0' + aws-sam-translator: '>=1.82.0' jschema-to-python: '>=1.2.3,<1.3.dev0' jsonpatch: '' - jsonschema: '>=3.0,<4.18' + jsonschema: '>=3.0,<5' junit-xml: '>=1.9,<2.dev0' networkx: '>=2.4,<4' python: '>=3.7,<4.0' pyyaml: '>5.4' - regex: '' + regex: '>=2021.7.1' sarif-om: '>=1.0.4,<1.1.dev0' sympy: '>=1.0.0' hash: - md5: 7e1bb14c96e20a83a9d2170f7cf99b35 - sha256: c9a71f90673966eb5d449993e134ac74ef8cdb3e1e5a7fe85f77fbfca768369f + md5: 6bf6c385031287e86a5821f57544fc12 + sha256: deed7d4700694a25d440816d13de89468fe92dfc87ba506f3fee72b5d1131c75 manager: conda name: cfn-lint optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/cfn-lint-0.79.9-pyhd8ed1ab_0.conda - version: 0.79.9 + url: https://conda.anaconda.org/conda-forge/noarch/cfn-lint-0.83.6-pyhd8ed1ab_0.conda + version: 0.83.6 +- category: main + dependencies: + colorama: '' + conda: '' + networkx: '' + python: '>=3.6' + hash: + md5: 184216409957e082712d750862782903 + sha256: 54e9cf114ca4eaeda91b5bb11a09d4391ba4be8a4fb2911259fc7dc2ec636054 + manager: conda + name: conda-tree + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/conda-tree-1.1.0-pyhd8ed1ab_2.conda + version: 1.1.0 +- category: main + dependencies: + __unix: '' + conda: '>=4.6' + conda-standalone: '' + jinja2: '' + pillow: '>=3.1' + python: '>=3.7' + ruamel.yaml: '>=0.11.14,<0.18' + hash: + md5: bece1550cd8ce528b234f41c85786ef8 + sha256: a4304eff880a3150e027f8af8d158cc9bf6e6c8444d2affda4e2b17125f44a85 + manager: conda + name: constructor + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/constructor-3.5.0-pyhe4f9e05_0.conda + version: 3.5.0 +- category: main + dependencies: + graphviz: '>=2.46.1' + python: '>=3' + hash: + md5: 196447bc6fd769c3eb2d51de1aa866a5 + sha256: 55e25bf761438b6b52e67ed06d3e5575445177a58636e873a9899aa7fd9c8585 + manager: conda + name: python-graphviz + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.1-pyh22cad53_0.tar.bz2 + version: 0.20.1 - category: main dependencies: aws-xray-sdk: '!=0.96,>=0.93' @@ -5449,14 +5712,14 @@ package: werkzeug: '>=0.5,!=2.2.0,!=2.2.1' xmltodict: '' hash: - md5: 779af6a36cd3a8f7260a074462e5e587 - sha256: d5128b843ac0f338f955bb1a93c3565be87b6a5c241300ee2a34fcd4509f7390 + md5: 9447c344fde58f458a55b05729ae74aa + sha256: f0586fd89bcc4e7df9cd12e66627473bed9b4bc33814b01f48e6059628af2f6b manager: conda name: moto optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/moto-4.2.2-pyhd8ed1ab_0.conda - version: 4.2.2 + url: https://conda.anaconda.org/conda-forge/noarch/moto-4.2.12-pyhd8ed1ab_0.conda + version: 4.2.12 - category: main dependencies: livereload: '>=2.3.0' @@ -5525,19 +5788,19 @@ package: version: '4.1' - category: main dependencies: - docutils: <0.19 - python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' - sphinx: '>=1.6,<8' + docutils: <0.21 + python: '>=3.6' + sphinx: '>=5,<8' sphinxcontrib-jquery: '>=4,<5' hash: - md5: a615c369167e508293d8409973b34863 - sha256: 1288aac6167e320b576d89855262f05b1903e446c3dfc92cc67b12b39fb62502 + md5: baf6d9a33df1a789ca55e3b404c7ea28 + sha256: 8545c806d03092fd0236db6663c88036eab2dc99e34c91cd36c0704db03b148a manager: conda name: sphinx_rtd_theme optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/sphinx_rtd_theme-1.3.0-pyha770c72_0.conda - version: 1.3.0 + url: https://conda.anaconda.org/conda-forge/noarch/sphinx_rtd_theme-2.0.0-pyha770c72_0.conda + version: 2.0.0 - category: main dependencies: python: '>=3.9' @@ -5554,32 +5817,32 @@ package: - category: main dependencies: alabaster: '>=0.7,<0.8' - babel: '>=1.3' - colorama: '>=0.3.5' - docutils: '>=0.14,<0.20' - imagesize: '' - importlib-metadata: '>=4.4' - jinja2: '>=2.3' - packaging: '' - pygments: '>=2.0' - python: '>=3.7' - requests: '>=2.5.0' - snowballstemmer: '>=1.1' + babel: '>=2.9' + colorama: '>=0.4.5' + docutils: '>=0.18.1,<0.21' + imagesize: '>=1.3' + importlib-metadata: '>=4.8' + jinja2: '>=3.0' + packaging: '>=21.0' + pygments: '>=2.14' + python: '>=3.9' + requests: '>=2.25.0' + snowballstemmer: '>=2.0' sphinxcontrib-applehelp: '' sphinxcontrib-devhelp: '' sphinxcontrib-htmlhelp: '>=2.0.0' sphinxcontrib-jsmath: '' sphinxcontrib-qthelp: '' - sphinxcontrib-serializinghtml: '>=1.1.5' + sphinxcontrib-serializinghtml: '>=1.1.9' hash: - md5: cd1129e88f6278787212624e1b7a8001 - sha256: 9d614432deff37f90ba406855fd9a21799ef09ab43ec27f5af12ac810fcd1dd1 + md5: bbfd1120d1824d2d073bc65935f0e4c0 + sha256: 665d1fe6d20c6cc672ff20e6ebb405860f878b487d3d8d86a5952733fb7bbc42 manager: conda name: sphinx optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/sphinx-5.1.1-pyhd8ed1ab_1.tar.bz2 - version: 5.1.1 + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda + version: 7.2.6 - category: main dependencies: python: '>=3.9' @@ -5603,25 +5866,17 @@ package: platform: linux-64 url: https://files.pythonhosted.org/packages/6b/20/471f41173930550f279ccb65596a5ac19b9ac974a8d93679bcd3e0c31498/mock-5.1.0-py3-none-any.whl version: 5.1.0 -- dependencies: {} - hash: - sha256: f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 - manager: pip - name: pyyaml - platform: linux-64 - url: https://files.pythonhosted.org/packages/02/25/6ba9f6bb50a3d4fbe22c1a02554dc670682a07c8701d1716d19ddea2c940/PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl - version: '6.0' - category: main dependencies: - six: '*' + six: '>=1.12.0' hash: - sha256: 6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c + sha256: 051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24 manager: pip name: asttokens optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/f3/e1/64679d9d0759db5b182222c81ff322c2fe2c31e156a59afd6e9208c960e5/asttokens-2.2.1-py2.py3-none-any.whl - version: 2.2.1 + url: https://files.pythonhosted.org/packages/45/86/4736ac618d82a20d87d2f92ae19441ebc7ac9e7a581d7e58bbe79233b24a/asttokens-2.4.1-py2.py3-none-any.whl + version: 2.4.1 - category: main dependencies: numpy: '*' @@ -5648,23 +5903,23 @@ package: - dependencies: typing-extensions: '>=4.2.0' hash: - sha256: 16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151 + sha256: 1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548 manager: pip name: pydantic platform: linux-64 - url: https://files.pythonhosted.org/packages/b6/8e/7dd215f91528487535e7aa048e4092c20ecd0168df958e58809e2235cece/pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - version: 1.10.11 + url: https://files.pythonhosted.org/packages/e0/2f/d6f17f8385d718233bcae893d27525443d41201c938b68a4af3d591a33e4/pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + version: 1.10.13 - category: main dependencies: ruamel.yaml.clib: '>=0.2.7' hash: - sha256: 23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 + sha256: b16b6c3816dff0a93dca12acf5e70afd089fa5acb80604afd1ffa8b465b7722c manager: pip name: ruamel.yaml optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/d9/0e/2a05efa11ea33513fbdf4a2e2576fe94fd8fa5ad226dbb9c660886390974/ruamel.yaml-0.17.32-py3-none-any.whl - version: 0.17.32 + url: https://files.pythonhosted.org/packages/35/79/5e2cffa1c77432f11cd93a5351f30732c997a239d3a3090856a72d6d8ba7/ruamel.yaml-0.17.40-py3-none-any.whl + version: 0.17.40 - category: main dependencies: mock: '*' @@ -5697,25 +5952,25 @@ package: pyyaml: '>=6.0,<7.0' ruamel.yaml: '>=0.17.21,<0.18.0' hash: - sha256: 47f1fc5904756b01d46a8d23a4f3950382086b716138e21a027cd44dc5101f27 + sha256: 7c237557d2a7c5f403474e54f9e5498758c71c24844e524a02656ac16369196d manager: pip name: hammer-vlsi optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/30/e4/37b77c7921b80d58d8b2a325c031e75d656319b676e7fd4555e02b651a9d/hammer_vlsi-1.1.2-py3-none-any.whl - version: 1.1.2 + url: https://files.pythonhosted.org/packages/dd/85/8a7ffd385db1dc84295ef3101559fe7ae0f8fa39942253ca270728642dc5/hammer_vlsi-1.2.0-py3-none-any.whl + version: 1.2.0 - category: main dependencies: asttokens: '>=2,<3' typing-extensions: '*' hash: - sha256: 1a441dad41c9a0615c6ae96464190eddccd2de8153254059ff18ffd7b3b84800 + sha256: 1ba4e88f909d3a4b97a565e1ea1199e5b050aa4bdad190c69086bfaed9680cc2 manager: pip name: icontract optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/d8/91/9756e7cf0b155e80bf9a62beffdd1dec4afce43cc6ab7f432f2267c62762/icontract-2.6.2-py3-none-any.whl - version: 2.6.2 + url: https://files.pythonhosted.org/packages/49/6f/92ae156eb6afd94ad4ecd38adadff16c83caa4c6d52bd4503a583cf054ab/icontract-2.6.6-py3-none-any.whl + version: 2.6.6 - category: main dependencies: icontract: '>=2.0.1,<3' diff --git a/docs/Chipyard-Basics/Chipyard-Components.rst b/docs/Chipyard-Basics/Chipyard-Components.rst index 8f8e9045..669bfdfc 100644 --- a/docs/Chipyard-Basics/Chipyard-Components.rst +++ b/docs/Chipyard-Basics/Chipyard-Components.rst @@ -53,9 +53,9 @@ System Components: **icenet** A Network Interface Controller (NIC) designed to achieve up to 200 Gbps. -**sifive-blocks** - System components implemented by SiFive and used by SiFive projects, designed to be integrated with the Rocket Chip generator. - These system and peripheral components include UART, SPI, JTAG, I2C, PWM, and other peripheral and interface devices. +**rocket-chip-blocks** + System components originally implemented by SiFive and used by SiFive projects, designed to be integrated with the Rocket Chip generator. + Now maintained by Chips Alliance. These system and peripheral components include UART, SPI, JTAG, I2C, PWM, and other peripheral and interface devices. **AWL (Analog Widget Library)** Digital components required for integration with high speed serial links. @@ -106,6 +106,9 @@ Software FireMarshal is the default workload generation tool that Chipyard uses to create software to run on its platforms. See :ref:`fire-marshal` for more information. +**Baremetal-IDE** + Baremetal-IDE is an all-in-one tool for baremetal-level C/C++ program development. See `Tutorial `_ for more information. + Sims ------------------------------------------- diff --git a/docs/Chipyard-Basics/Initial-Repo-Setup.rst b/docs/Chipyard-Basics/Initial-Repo-Setup.rst index 9f31624e..948b7e2e 100644 --- a/docs/Chipyard-Basics/Initial-Repo-Setup.rst +++ b/docs/Chipyard-Basics/Initial-Repo-Setup.rst @@ -46,7 +46,7 @@ This is done by the following: .. code-block:: shell - conda install -n base conda-lock=1.4 + conda install -n base conda-lock==1.4.0 conda activate base diff --git a/docs/Customization/Boot-Process.rst b/docs/Customization/Boot-Process.rst index a84c4e99..52ea32c1 100644 --- a/docs/Customization/Boot-Process.rst +++ b/docs/Customization/Boot-Process.rst @@ -12,7 +12,7 @@ Device Tree Binary (dtb) which details the components of the system. The assembly for the BootROM code is located in `generators/testchipip/src/main/resources/testchipip/bootrom/bootrom.S `_. The BootROM address space starts at ``0x10000`` (determined by the ``BootROMParams`` key in the configuration) and execution starts at address -``0x10040`` (given by the linker script and reset vector in the ``BootROMParams``), which is marked by the ``_hang`` label in the BootROM assembly. +``0x10000`` (given by the linker script and reset vector in the ``BootROMParams``), which is marked by the ``_hang`` label in the BootROM assembly. The Chisel generator encodes the assembled instructions into the BootROM hardware at elaboration time, so if you want to change the BootROM code, you diff --git a/docs/Customization/Custom-Chisel.rst b/docs/Customization/Custom-Chisel.rst index 121ca712..a3b4ef72 100644 --- a/docs/Customization/Custom-Chisel.rst +++ b/docs/Customization/Custom-Chisel.rst @@ -59,7 +59,7 @@ should look something like this: .. code-block:: scala lazy val chipyard = (project in file("generators/chipyard")) - .dependsOn(testchipip, rocketchip, boom, hwacha, sifive_blocks, sifive_cache, iocell, + .dependsOn(testchipip, rocketchip, boom, hwacha, rocketchip_blocks, rocketchip_inclusive_cache, iocell, sha3, dsptools, `rocket-dsp-utils`, gemmini, icenet, tracegen, cva6, nvdla, sodor, ibex, fft_generator, yourproject, // <- added to the middle of the list for simplicity diff --git a/docs/Customization/IOBinders.rst b/docs/Customization/IOBinders.rst index d3626a03..d7e65223 100644 --- a/docs/Customization/IOBinders.rst +++ b/docs/Customization/IOBinders.rst @@ -13,7 +13,7 @@ The ``IOBinder`` functions are responsible for instantiating IO cells and IOPort For example, the ``WithUARTIOCells`` IOBinder will, for any ``System`` that might have UART ports (``HasPeripheryUARTModuleImp``, generate ports within the ``ChipTop`` (``ports``) as well as IOCells with the appropriate type and direction (``cells2d``). This function returns a the list of generated ports, and the list of generated IOCells. The list of generated ports is passed to the ``HarnessBinders`` such that they can be connected to ``TestHarness`` devices. -.. literalinclude:: ../../generators/chipyard/src/main/scala/IOBinders.scala +.. literalinclude:: ../../generators/chipyard/src/main/scala/iobinders/IOBinders.scala :language: scala :start-after: DOC include start: WithUARTIOCells :end-before: DOC include end: WithUARTIOCells diff --git a/docs/Customization/Incorporating-Verilog-Blocks.rst b/docs/Customization/Incorporating-Verilog-Blocks.rst index 3198d087..7724ffb2 100644 --- a/docs/Customization/Incorporating-Verilog-Blocks.rst +++ b/docs/Customization/Incorporating-Verilog-Blocks.rst @@ -161,4 +161,31 @@ transformed or augmented by any Chipyard FIRRTL transform. As mentioned earlier in this section, ``BlackBox`` resource files must be integrated into the build process, so any project providing ``BlackBox`` resources must be made visible to the ``tapeout`` project -in ``build.sbt`` +in ``build.sbt``. + +Differences between ``HasBlackBoxPath`` and ``HasBlackBoxResource`` +------------------------------------------------------------------- + +Chisel provides two mechanisms for integrating blackbox files into a Chisel project that work slightly differently in Chipyard: ``HasBlackBoxPath`` and ``HasBlackBoxResource``. + +``HasBlackBoxResource`` incorporates extra files by looking up the relative path of the files within the ``src/main/resources`` area of project. +This requires that the file added by ``addResource`` is present in the ``src/main/resources`` area and is **not** auto-generated (the file is static throughout the lifetime of generating RTL). +This is due to the fact that when the Chisel sources are compiled they are put in a ``jar`` file, along with the ``src/main/resources`` area, and that ``jar`` is used to run the Chisel generator. +Files referenced by the ``addResource`` must be located within this ``jar`` file during the Chisel elaboration. +Thus if a file is generated during Chisel generation it will not be present in the ``jar`` file until the next time the Chisel sources are compiled. + +``HasBlackBoxPath`` differs in that it incorporates extra files by using an absolute path to them. +Later in the build process, the FIRRTL compiler will copy the file from that location to the generated sources directory. +Thus, the file must be present before the FIRRTL compiler is run (i.e. the file doesn't need to be in the ``src/main/resources`` or it can be auto-generated during Chisel elaboration). + +Additionally, both mechanisms do not enforce the order of files added. +For example: + +.. code-block:: scala + + addResource("fileA") + addResource("fileB") + +In this case, ``fileA`` is not guaranteed to be before ``fileB`` when passed to downstream tools. +To bypass this, it is recommended to auto-generate a single file with the ordering needed by concatenating the files and using ``addPath`` given by ``HasBlackBoxPath``. +An example of this is https://github.com/ucb-bar/ibex-wrapper/blob/main/src/main/scala/IbexCoreBlackbox.scala. diff --git a/docs/Customization/Memory-Hierarchy.rst b/docs/Customization/Memory-Hierarchy.rst index 623d4544..11bc132b 100644 --- a/docs/Customization/Memory-Hierarchy.rst +++ b/docs/Customization/Memory-Hierarchy.rst @@ -46,17 +46,17 @@ agents and MMIO peripherals. Ordinarily, it is a fully-connected crossbar, but a network-on-chip-based implementation can be generated using Constellation. See :ref:`Customization/NoC-SoCs:SoCs with NoC-based Interconnects` for more. -The SiFive L2 Cache -------------------- +The Inclusive Last-Level Cache +--------------------------------- -The default ``RocketConfig`` provided in the Chipyard example project uses SiFive's +The default ``RocketConfig`` provided in the Chipyard example project uses the Rocket-Chip InclusiveCache generator to produce a shared L2 cache. In the default configuration, the L2 uses a single cache bank with 512 KiB capacity and 8-way set-associativity. However, you can change these parameters to obtain your desired cache configuration. The main restriction is that the number of ways and the number of banks must be powers of 2. -Refer to the ``CacheParameters`` object defined in sifive-cache for +Refer to the ``CacheParameters`` object defined in ``rocket-chip-inclusive-cache`` for customization options. The Broadcast Hub @@ -94,10 +94,10 @@ memory channel. Instead of connecting to off-chip DRAM, you can instead connect a scratchpad and remove the off-chip link. This is done by adding a fragment like -``testchipip.WithScratchpad`` to your configuration and removing the +``testchipip.soc.WithScratchpad`` to your configuration and removing the memory port with ``freechips.rocketchip.subsystem.WithNoMemPort``. -.. literalinclude:: ../../generators/chipyard/src/main/scala/config/RocketConfigs.scala +.. literalinclude:: ../../generators/chipyard/src/main/scala/config/MemorySystemConfigs.scala :language: scala :start-after: DOC include start: mbusscratchpadrocket :end-before: DOC include end: mbusscratchpadrocket diff --git a/docs/Generators/SiFive-Generators.rst b/docs/Generators/Rocket-Chip-Generators.rst similarity index 72% rename from docs/Generators/SiFive-Generators.rst rename to docs/Generators/Rocket-Chip-Generators.rst index d6b174ef..435fa1dd 100644 --- a/docs/Generators/SiFive-Generators.rst +++ b/docs/Generators/Rocket-Chip-Generators.rst @@ -1,19 +1,19 @@ -SiFive Generators -================== +Rocket-Chip Generators +====================== -Chipyard includes several open-source generators developed and maintained by `SiFive `__. -These are currently organized within two submodules named ``sifive-blocks`` and ``sifive-cache``. +Chipyard includes several open-source generators developed by `SiFive `__, and now openly maintained as part of Chips Alliance. +These are currently organized within two submodules named ``rocket-chip-blocks`` and ``rocket-chip-inclusive-cache``. Last-Level Cache Generator ----------------------------- -``sifive-cache`` includes last-level cache geneator. The Chipyard framework uses this last-level cache as an L2 cache. To use this L2 cache, you should add the ``freechips.rocketchip.subsystem.WithInclusiveCache`` config fragment to your SoC configuration. +``rocket-chip-inclusive-cache`` includes last-level cache geneator. The Chipyard framework uses this last-level cache as an L2 cache. To use this L2 cache, you should add the ``freechips.rocketchip.subsystem.WithInclusiveCache`` config fragment to your SoC configuration. To learn more about configuring this L2 cache, please refer to the :ref:`memory-hierarchy` section. Peripheral Devices Overview ---------------------------- -``sifive-blocks`` includes multiple peripheral device generators, such as UART, SPI, PWM, JTAG, GPIO and more. +``rocket-chip-blocks`` includes multiple peripheral device generators, such as UART, SPI, PWM, JTAG, GPIO and more. These peripheral devices usually affect the memory map of the SoC, and its top-level IO as well. All the peripheral blocks comes with a default memory address that would not collide with each other, but if integrating multiple duplicated blocks in the SoC is needed, you will need to explicitly specify an approriate memory address for that device. @@ -34,7 +34,7 @@ Finally, you add the relevant config fragment to the SoC config. For example: General Purpose I/Os (GPIO) Device ---------------------------------- -GPIO device is a periphery device provided by ``sifive-blocks``. Each general-purpose I/O port has five 32-bit configuration registers, two 32-bit data registers controlling pin input and output values, and eight 32-bit interrupt control/status register for signal level and edge triggering. In addition, all GPIOs can have two 32-bit alternate function selection registers. +GPIO device is a periphery device provided by ``rocket-chip-blocks``. Each general-purpose I/O port has five 32-bit configuration registers, two 32-bit data registers controlling pin input and output values, and eight 32-bit interrupt control/status register for signal level and edge triggering. In addition, all GPIOs can have two 32-bit alternate function selection registers. GPIO main features @@ -78,7 +78,7 @@ Including GPIO in the SoC Universal Asynchronous Receiver/Transmitter (UART) Device ---------------------------------------------------------- -UART device is a periphery device provided by ``sifive-blocks``. The UART offers a flexible means to perform Full-duplex data exchange with external devices. A very wide range of baud rates can be achieved through a fractional baud rate generator. The UART peripheral does not support other modem control signals, or synchronous serial data transfers. +UART device is a periphery device provided by ``rocket-chip-blocks``. The UART offers a flexible means to perform Full-duplex data exchange with external devices. A very wide range of baud rates can be achieved through a fractional baud rate generator. The UART peripheral does not support other modem control signals, or synchronous serial data transfers. UART main features @@ -125,7 +125,7 @@ Including UART in the SoC Inter-Integrated Circuit (I2C) Interface Device ------------------------------------------------- -I2C device is a periphery device provided by ``sifive-blocks``. The I2C (inter-integrated circuit) bus interface handles communications to the serial I2C bus. It provides multi-master capability, and controls all I2C bus-specific sequencing, protocol, arbitration and timing. It supports Standard-mode (Sm), Fast-mode (Fm) and Fast-mode Plus (Fm+). +I2C device is a periphery device provided by ``rocket-chip-blocks``. The I2C (inter-integrated circuit) bus interface handles communications to the serial I2C bus. It provides multi-master capability, and controls all I2C bus-specific sequencing, protocol, arbitration and timing. It supports Standard-mode (Sm), Fast-mode (Fm) and Fast-mode Plus (Fm+). I2C main features @@ -169,7 +169,7 @@ Including I2C in the SoC Serial Peripheral Interface (SPI) Device ------------------------------------------------- -SPI device is a periphery device provided by ``sifive-blocks``. The SPI interface can be used to communicate with external devices using the SPI protocol. +SPI device is a periphery device provided by ``rocket-chip-blocks``. The SPI interface can be used to communicate with external devices using the SPI protocol. The serial peripheral interface (SPI) protocol supports half-duplex, full-duplex and simplex synchronous, serial communication with external devices. The interface can be configured as master and in this case it provides the communication clock (SCLK) to the external slave device. diff --git a/docs/Generators/Rocket-Chip.rst b/docs/Generators/Rocket-Chip.rst index 856d01e1..3e404939 100644 --- a/docs/Generators/Rocket-Chip.rst +++ b/docs/Generators/Rocket-Chip.rst @@ -1,8 +1,8 @@ Rocket Chip =========== -Rocket Chip generator is an SoC generator developed at Berkeley and now supported by -`SiFive `__. Chipyard uses the Rocket Chip generator as the basis for producing a RISC-V SoC. +Rocket Chip generator is an SoC generator developed at Berkeley and SiFive, and now maintained openly in Chips Alliance. +Chipyard uses the Rocket Chip generator as the basis for producing a RISC-V SoC. `Rocket Chip` is distinct from `Rocket core`, the in-order RISC-V CPU generator. Rocket Chip includes many parts of the SoC besides the CPU. Though Rocket Chip diff --git a/docs/Generators/Rocket.rst b/docs/Generators/Rocket.rst index 6c55b761..536d6991 100644 --- a/docs/Generators/Rocket.rst +++ b/docs/Generators/Rocket.rst @@ -1,7 +1,7 @@ Rocket Core ==================================== -`Rocket `__ is a 5-stage in-order scalar processor core generator, originally developed at UC Berkeley and currently supported by `SiFive `__. The `Rocket core` is used as a component within the `Rocket Chip SoC generator`. A Rocket core combined with L1 caches (data and instruction caches) form a `Rocket tile`. The `Rocket tile` is the replicable component of the `Rocket Chip SoC generator`. +`Rocket `__ is a 5-stage in-order scalar processor core generator, originally developed at UC Berkeley and `SiFive `__, and now maintained by Chips Alliance. The `Rocket core` is used as a component within the `Rocket Chip SoC generator`. A Rocket core combined with L1 caches (data and instruction caches) form a `Rocket tile`. The `Rocket tile` is the replicable component of the `Rocket Chip SoC generator`. The Rocket core supports the open-source RV64GC RISC-V instruction set and is written in the Chisel hardware construction language. It has an MMU that supports page-based virtual memory, a non-blocking data cache, and a front-end with branch prediction. diff --git a/docs/Generators/TestChipIP.rst b/docs/Generators/TestChipIP.rst index 2c382d4f..32e76f5b 100644 --- a/docs/Generators/TestChipIP.rst +++ b/docs/Generators/TestChipIP.rst @@ -92,3 +92,15 @@ The SPI flash model is a device that models a simple SPI flash device. It curren only supports single read, quad read, single write, and quad write instructions. The memory is backed by a file which is provided using ``+spiflash#=``, where ``#`` is the SPI flash ID (usually ``0``). + +Chip ID Pin +--------------- + +The chip ID pin sets the chip ID for the chip it is added to. This is most useful in +multi-chip configs. The pin value is driven by the chip ID value set in the harness +binder and the chip ID value can be read through MMIO at the address ``0x2000`` by default. + +The pin can be added to a system with the ``testchipip.soc.WithChipIdPin`` config. The pin +width and MMIO address are parameterizable and can be set by passing ``ChipIdPinParams`` as an +argument to the config. The width can additionally be set using the ``testchipip.soc.WithChipIdPinWidth`` +config. diff --git a/docs/Generators/index.rst b/docs/Generators/index.rst index c2bf3719..651a6bae 100644 --- a/docs/Generators/index.rst +++ b/docs/Generators/index.rst @@ -26,7 +26,7 @@ so changes to the generators themselves will automatically be used when building Gemmini IceNet TestChipIP - SiFive-Generators + Rocket-Chip-Generators SHA3 CVA6 Ibex diff --git a/docs/Prototyping/Arty.rst b/docs/Prototyping/Arty.rst index 15347cf8..843c05f5 100644 --- a/docs/Prototyping/Arty.rst +++ b/docs/Prototyping/Arty.rst @@ -2,18 +2,18 @@ Running a Design on Arty ======================== Arty100T Instructions ----------------------- +--------------------- -The default Xilinx Arty 100T harness uses a TSI-over-UART adapter to bringup the FPGA. -A user can connect to the Arty 100T target using a special ``uart_tsi`` program that opens a UART TTY. +The default Digilent Arty A7-100T harness uses a TSI-over-UART adapter to bringup the FPGA. +A user can connect to the Arty A7-100T target using a special ``uart_tsi`` program that opens a UART TTY. The interface for the ``uart_tsi`` program provides unique functionality that is useful for bringing up test chips. -To build the design, run: +To build the design (Vivado should be added to the ``PATH``), run: .. code-block:: shell cd fpga/ - make SUB_PROJECT=arty100t + make SUB_PROJECT=arty100t bitstream To build the UART-based frontend server, run: @@ -34,7 +34,7 @@ Probe an address on the target system: .. code-block:: shell - ./uart_tsi +tty=/dev/ttyUSBX +init_read=0x10040 none + ./uart_tsi +tty=/dev/ttyUSBX +init_read=0x10000 none Write some address before running a program: @@ -58,7 +58,7 @@ Run a design at a higher baud rate than default (For example, if ``CONFIG=UART92 Arty35T Legacy Instructions --------------------------- -The default Xilinx Arty 35T harness is setup to have JTAG available over the board's PMOD pins, and UART available over its FTDI serial USB adapter. The pin mappings for JTAG signals are identical to those described in the `SiFive Freedom E310 Arty 35T Getting Started Guide `__. +The default Digilent Arty A7-35T harness is setup to have JTAG available over the board's PMOD pins, and UART available over its FTDI serial USB adapter. The pin mappings for JTAG signals are identical to those described in the `SiFive Freedom E310 Arty 35T Getting Started Guide `__. The JTAG interface allows a user to connect to the core via OpenOCD, run bare-metal applications, and debug these applications with gdb. UART allows a user to communicate with the core over a USB connection and serial console running on a PC. To extend this design, a user may create their own Chipyard configuration and add the ``WithArtyTweaks`` located in ``fpga/src/main/scala/arty/Configs.scala``. Adding this config. fragment will enable and connect the JTAG and UART interfaces to your Chipyard design. @@ -68,13 +68,13 @@ Adding this config. fragment will enable and connect the JTAG and UART interface :start-after: DOC include start: AbstractArty and Rocket :end-before: DOC include end: AbstractArty and Rocket -Future peripherals to be supported include the Arty 35T SPI Flash EEPROM, and I2C/PWM/SPI over the Arty 35T GPIO pins. These peripherals are available as part of sifive-blocks. +Future peripherals to be supported include the Arty A7-35T SPI Flash EEPROM, and I2C/PWM/SPI over the Arty A7-35T GPIO pins. These peripherals are available as part of sifive-blocks. Brief Implementation Description and Guidance for Adding/Changing Xilinx Collateral ----------------------------------------------------------------------------------- -Like the VCU118, the basis for the Arty 35T design is the creation of a special test harness that connects the external IO (which exist as Xilinx IP blackboxes) to the Chipyard design. -This is done with the ``ArtyTestHarness`` in the basic default Arty 35T target. However, unlike the ``VCU118TestHarness``, the ``ArtyTestHarness`` uses no ``Overlays``, and instead directly connects chip top IO to the ports of the external IO blackboxes, using functions such as ``IOBUF`` provided by ``fpga-shells``. -Unlike the VCU118 and other more complicated test harnesses, the Arty 35T Vivado collateral is not generated by ``Overlays``, but rather are a static collection of ``create_ip`` and ``set_properties`` statements located in the files within ``fpga/fpga-shells/xilinx/arty/tcl`` and ``fpga/fpga-shells/xilinx/arty/constraints``. +Like the VCU118, the basis for the Arty A7-35T design is the creation of a special test harness that connects the external IO (which exist as Xilinx IP blackboxes) to the Chipyard design. +This is done with the ``ArtyTestHarness`` in the basic default Arty A7-35T target. However, unlike the ``VCU118TestHarness``, the ``ArtyTestHarness`` uses no ``Overlays``, and instead directly connects chip top IO to the ports of the external IO blackboxes, using functions such as ``IOBUF`` provided by ``fpga-shells``. +Unlike the VCU118 and other more complicated test harnesses, the Arty A7-35T Vivado collateral is not generated by ``Overlays``, but rather are a static collection of ``create_ip`` and ``set_properties`` statements located in the files within ``fpga/fpga-shells/xilinx/arty/tcl`` and ``fpga/fpga-shells/xilinx/arty/constraints``. If the user wishes to re-map FPGA package pins to different harness-level IO, this may be changed within ``fpga/fpga-shells/xilinx/arty/constraints/arty-master.xdc``. The addition of new Xilinx IP blocks may be done in ``fpga-shells/xilinx/arty/tcl/ip.tcl``, mapped to harness-level IOs in ``arty-master.xdc``, and wired through from the test harness to the chip top using ``HarnessBinders`` and ``IOBinders``. Examples of a simple ``IOBinder`` and ``HarnessBinder`` for routing signals (in this case the debug and JTAG resets) from the core to the test harness are the ``WithResetPassthrough`` and ``WithArtyResetHarnessBinder``. diff --git a/docs/Prototyping/General.rst b/docs/Prototyping/General.rst index 2b7a7332..051cbcf8 100644 --- a/docs/Prototyping/General.rst +++ b/docs/Prototyping/General.rst @@ -2,7 +2,7 @@ General Setup and Usage ============================== Sources ---------------------------- +------- All FPGA prototyping-related collateral and sources are located in the ``fpga`` top-level Chipyard directory. This includes the ``fpga-shells`` submodule and the ``src`` directory that hold both Scala, TCL and other collateral. diff --git a/docs/Prototyping/NexysVideo.rst b/docs/Prototyping/NexysVideo.rst new file mode 100644 index 00000000..5256261f --- /dev/null +++ b/docs/Prototyping/NexysVideo.rst @@ -0,0 +1,49 @@ +Running a Design on Nexys Video +=============================== + +Nexys Video Instructions +------------------------ + +The default Digilent Nexys Video harness uses a TSI-over-UART adapter to bringup the FPGA. +A user can connect to the Nexys Video target using a special ``uart_tsi`` program that opens a UART TTY. +The interface for the ``uart_tsi`` program provides unique functionality that is useful for bringing up test chips. + +To build the design (Vivado should be added to the ``PATH``), run: + +.. code-block:: shell + + cd fpga/ + make SUB_PROJECT=nexysvideo bitstream + +To build the UART-based frontend server, run: + +.. code-block:: shell + + cd generators/testchipip/uart_tsi + make + +After programming the bitstream, and connecting the Nexys Video's UART to a host PC via the USB cable, the ``uart_tsi`` program can be run to interact with the target. + +Running a program: + +.. code-block:: shell + + ./uart_tsi +tty=/dev/ttyUSBX dhrystone.riscv + +Probe an address on the target system: + +.. code-block:: shell + + ./uart_tsi +tty=/dev/ttyUSBX +init_read=0x10000 none + +Write some address before running a program: + +.. code-block:: shell + + ./uart_tsi +tty=/dev/ttyUSBX +init_write=0x80000000:0xdeadbeef none + +Self-check that binary loading proceeded correctly: + +.. code-block:: shell + + ./uart_tsi +tty=/dev/ttyUSBX +selfcheck dhrystone.riscv diff --git a/docs/Prototyping/index.rst b/docs/Prototyping/index.rst index ba0dff49..a2332a25 100644 --- a/docs/Prototyping/index.rst +++ b/docs/Prototyping/index.rst @@ -2,10 +2,10 @@ Prototyping Flow ================ Chipyard supports FPGA prototyping for local FPGAs supported by `fpga-shells `__. -This includes popular FPGAs such as the Xilinx VCU118 and the Xilinx Arty 35T board. +This includes popular FPGAs such as the Xilinx VCU118 and the Digilent Arty A7-35T/A7-100T board. -.. Note:: While ``fpga-shells`` provides harnesses for other FPGA development boards such as the Xilinx VC707 and some MicroSemi PolarFire, only harnesses for the Xilinx VCU118 and Xilinx Arty 35T boards are currently supported in Chipyard. - However, the VCU118 and Arty 35T examples demonstrate how a user may implement support for other harnesses provided by fpga-shells. +.. Note:: While ``fpga-shells`` provides harnesses for other FPGA development boards such as the Xilinx VC707 and some MicroSemi PolarFire, only harnesses for the Xilinx VCU118 and Digilent Arty A7-35T/A7-100T boards are currently supported in Chipyard. + However, the VCU118 and Arty A7-35T/A7-100T examples demonstrate how a user may implement support for other harnesses provided by fpga-shells. .. toctree:: :maxdepth: 2 @@ -14,3 +14,4 @@ This includes popular FPGAs such as the Xilinx VCU118 and the Xilinx Arty 35T bo General VCU118 Arty + NexysVideo diff --git a/docs/Simulation/Software-RTL-Simulation.rst b/docs/Simulation/Software-RTL-Simulation.rst index 2e832182..8c87cc80 100644 --- a/docs/Simulation/Software-RTL-Simulation.rst +++ b/docs/Simulation/Software-RTL-Simulation.rst @@ -81,6 +81,24 @@ For example: .. _sw-sim-custom: +Custom Benchmarks/Tests +------------------------------- + +To compile your own bare-metal code to run in a Verilator/VCS simulation, add it to Chipyard's ``tests`` directory then add its name to the list of ``PROGRAMS`` inside the ``Makefile``. These binaries are compiled with the libgloss-htif library, which implements a minimal set of useful syscalls for bare-metal binaries. Then when you run ``make``, all of the programs inside ``tests`` will be compiled into ``.riscv`` ELF binaries, which can be used with the simulator as described above. + +.. code-block:: shell + + # Enter Tests directory + cd tests + make + + # Enter Verilator or VCS directory + cd ../sims/verilator + make run-binary BINARY=../../tests/hello.riscv + +.. Note:: On multi-core configurations, only hart (**har**\ dware **t**\ hread) 0 executes the ``main()`` function. All other harts execute the secondary ``__main()`` function, which defaults to a busy loop. To run a multi-threaded workload on a Verilator/VCS simulation, override ``__main()`` with your own code. More details can be found `here `_ + + Makefile Variables and Commands ------------------------------- You can get a list of useful Makefile variables and commands available from the Verilator or VCS directories. simply run ``make help``: diff --git a/docs/Software/Spike.rst b/docs/Software/Spike.rst index e9abe0c0..10fa8429 100644 --- a/docs/Software/Spike.rst +++ b/docs/Software/Spike.rst @@ -50,3 +50,24 @@ Spike-as-a-Tile can be configured with custom IPC, commit logging, and other beh * ``+spike-fast-clint``: Enables fast-forwarding through WFI stalls by generating fake timer interrupts * ``+spike-debug``: Enables debug Spike logging * ``+spike-verbose``: Enables Spike commit-log generation + +Adding a new spike device model +------------------------------- + +Spike comes with a few functional device models such as UART, CLINT, and PLIC. +However, you may want to add custom device models into Spike such as a block device. +Example devices are in the ``toolchains/riscv-tools/riscv-spike-devices`` directory. +These devices are compiled as a shared library that can be dynamically linked to Spike. + +To compile these plugins, run ``make`` inside ``toolchains/riscv-tools/riscv-spike-devices``. This will generate a ``libspikedevices.so``. + +To hook up a block device to spike and provide a default image to initialize the block device, run + +.. code-block:: shell + + spike --extlib=libspikedevices.so --device="iceblk,img=" + +. + +The ``--device`` option consists of the device name and arguments. +In the above example ``iceblk`` is the device name and ``img=`` is the argument passed on to the plugin device. diff --git a/docs/VLSI/Sky130-Commercial-Tutorial.rst b/docs/VLSI/Sky130-Commercial-Tutorial.rst index 9ca81583..92e4330c 100644 --- a/docs/VLSI/Sky130-Commercial-Tutorial.rst +++ b/docs/VLSI/Sky130-Commercial-Tutorial.rst @@ -60,7 +60,7 @@ The prerequisite setup for this tutorial may eventually be scripted, but for now .. code-block:: shell # download all files for Sky130A PDK - conda create -c litex-hub --prefix ~/.conda-sky130 open_pdks.sky130a=1.0.399_0_g63dbde9 + conda create -c litex-hub --prefix ~/.conda-sky130 open_pdks.sky130a=1.0.457_0_g32e8f23 # clone the SRAM22 Sky130 SRAM macros git clone https://github.com/rahulk29/sram22_sky130_macros ~/sram22_sky130_macros @@ -123,8 +123,7 @@ The ``buildfile`` make target has dependencies on both (1) the Verilog that is e and (2) the mapping of memory instances in the design to SRAM macros; all files related to these two steps reside in the ``generated-src/chipyard.harness.TestHarness.TinyRocketConfig-ChipTop`` directory. Note that the files in ``generated-src`` vary for each tool/technology flow. -This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows -(due to the ``ENABLE_YOSYS_FLOW`` flag present for the OpenROAD flow), so these flows should be run in separate +This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows, so these flows should be run in separate chipyard installations. If the wrong sources are generated, simply run ``make buildfile -B`` to rebuild all targets correctly. diff --git a/docs/VLSI/Sky130-OpenROAD-Tutorial.rst b/docs/VLSI/Sky130-OpenROAD-Tutorial.rst index a9cfa7b1..0c138d66 100644 --- a/docs/VLSI/Sky130-OpenROAD-Tutorial.rst +++ b/docs/VLSI/Sky130-OpenROAD-Tutorial.rst @@ -49,7 +49,7 @@ Prerequisites * OpenROAD flow tools (NOTE: tutorial may break with different tool versions): * **Yosys 0.27+3** (synthesis), install `using conda `__ or `from source `__ - * **OpenROAD v2.0-7070-g0264023b6** (place-and-route), install `using conda `__ (note that GUI is disabled in conda package) or + * **OpenROAD v2.0-7070-g0264023b6** (place-and-route), install `using conda `__ (note that GUI is disabled in conda package) or `from source `__ (git hash: 0264023b6c2a8ae803b8d440478d657387277d93) * **KLayout 0.28.5** (DEF to GDSII conversion, DRC), install `using conda `__ or `from source `__ * **Magic 8.3.376** (DRC), install `using conda `__ or `from source `__ @@ -73,7 +73,7 @@ Note that we create a new conda environment for each tool because some of them h conda config --add channels defaults # download all files for Sky130A PDK - conda create -c litex-hub --prefix ~/.conda-sky130 open_pdks.sky130a=1.0.399_0_g63dbde9 + conda create -c litex-hub --prefix ~/.conda-sky130 open_pdks.sky130a=1.0.457_0_g32e8f23 # clone the SRAM22 Sky130 SRAM macros git clone https://github.com/rahulk29/sram22_sky130_macros ~/sram22_sky130_macros @@ -161,8 +161,7 @@ The ``buildfile`` make target has dependencies on both (1) the Verilog that is e and (2) the mapping of memory instances in the design to SRAM macros; all files related to these two steps reside in the ``generated-src/chipyard.harness.TestHarness.TinyRocketConfig-ChipTop`` directory. Note that the files in ``generated-src`` vary for each tool/technology flow. -This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows -(due to the ``ENABLE_YOSYS_FLOW`` flag, explained below), so these flows should be run in separate +This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows, so these flows should be run in separate chipyard installations. If the wrong sources are generated, simply run ``make buildfile -B`` to rebuild all targets correctly. @@ -175,7 +174,6 @@ which will cause additional variables to be set in ``tutorial.mk``, a few of whi * ``DESIGN_CONF`` and ``EXTRA_CONFS`` allow for additonal design-specific overrides of the Hammer IR in ``example-sky130.yml`` * ``VLSI_OBJ_DIR=build-sky130-openroad`` gives the build directory a unique name to allow running multiple flows in the same repo. Note that for the rest of the tutorial we will still refer to this directory in file paths as ``build``, again for brevity. * ``VLSI_TOP`` is by default ``ChipTop``, which is the name of the top-level Verilog module generated in the Chipyard SoC configs. By instead setting ``VLSI_TOP=Rocket``, we can use the Rocket core as the top-level module for the VLSI flow, which consists only of a single RISC-V core (and no caches, peripherals, buses, etc). This is useful to run through this tutorial quickly, and does not rely on any SRAMs. -* ``ENABLE_YOSYS_FLOW = 1`` is required for synthesis through Yosys. This reverts to the Scala FIRRTL Compiler so that unsupported multidimensional arrays are not generated in the Verilog. Running the VLSI Flow --------------------- @@ -275,7 +273,7 @@ This is because Magic and Netgen, as of the writing of this tutorial, do not hav so to view the DRC/LVS results for debugging you must launch the tool interactively, then run DRC/LVS checks, which is done by the ``generated-scripts/view_[drc|lvs]`` scripts. This is not the case for KLayout, which does have a loadable database format. -Below is the window you should see when loading the KLayout DRC results interactively. Note that most of these DRC errors are +Below is the window you should see when loading the KLayout DRC results interactively. Note that most of these DRC errors are from special rules relating to Sky130 SRAMs, which have been verified separately. In the future the KLayout tool plugin should blackbox these SRAM macros by default, but this feature does not exist yet. diff --git a/fpga/Makefile b/fpga/Makefile index 7521b1ed..a4d3bf99 100644 --- a/fpga/Makefile +++ b/fpga/Makefile @@ -57,11 +57,26 @@ ifeq ($(SUB_PROJECT),bringup) BOARD ?= vcu118 FPGA_BRAND ?= xilinx endif -ifeq ($(SUB_PROJECT),arty) + +ifeq ($(SUB_PROJECT),nexysvideo) + SBT_PROJECT ?= fpga_platforms + MODEL ?= NexysVideoHarness + VLOG_MODEL ?= NexysVideoHarness + MODEL_PACKAGE ?= chipyard.fpga.nexysvideo + CONFIG ?= RocketNexysVideoConfig + CONFIG_PACKAGE ?= chipyard.fpga.nexysvideo + GENERATOR_PACKAGE ?= chipyard + TB ?= none # unused + TOP ?= ChipTop + BOARD ?= nexys_video + FPGA_BRAND ?= xilinx +endif + +ifeq ($(SUB_PROJECT),arty35t) # TODO: Fix with Arty SBT_PROJECT ?= fpga_platforms - MODEL ?= ArtyFPGATestHarness - VLOG_MODEL ?= ArtyFPGATestHarness + MODEL ?= Arty35THarness + VLOG_MODEL ?= Arty35THarness MODEL_PACKAGE ?= chipyard.fpga.arty CONFIG ?= TinyRocketArtyConfig CONFIG_PACKAGE ?= chipyard.fpga.arty @@ -122,7 +137,7 @@ include $(base_dir)/common.mk # copy from other directory ######################################################################################### all_vsrcs := \ - $(base_dir)/generators/sifive-blocks/vsrc/SRLatch.v + $(base_dir)/generators/rocket-chip-blocks/vsrc/SRLatch.v ######################################################################################### # vivado rules diff --git a/fpga/bootrom.rv32.img b/fpga/bootrom.rv32.img new file mode 100755 index 00000000..fbab5033 Binary files /dev/null and b/fpga/bootrom.rv32.img differ diff --git a/fpga/bootrom.rv64.img b/fpga/bootrom.rv64.img new file mode 100755 index 00000000..8d4fea05 Binary files /dev/null and b/fpga/bootrom.rv64.img differ diff --git a/fpga/fpga-shells b/fpga/fpga-shells index 7d0b79f8..93004b7b 160000 --- a/fpga/fpga-shells +++ b/fpga/fpga-shells @@ -1 +1 @@ -Subproject commit 7d0b79f8559b9bcea1bde8d0293576a502a7a896 +Subproject commit 93004b7bd02eb7cc32a25cc1bc40595b93add118 diff --git a/fpga/src/main/resources/vcu118/sdboot/sd.c b/fpga/src/main/resources/vcu118/sdboot/sd.c index f1bdb61e..bc1a68e8 100644 --- a/fpga/src/main/resources/vcu118/sdboot/sd.c +++ b/fpga/src/main/resources/vcu118/sdboot/sd.c @@ -22,7 +22,16 @@ #error Must define TL_CLK #endif -#define F_CLK TL_CLK +#define F_CLK (TL_CLK) + +// SPI SCLK frequency, in kHz +// We are using the 25MHz High Speed mode. If this speed is not supported by the +// SD card, consider changing to the Default Speed mode (12.5 MHz). +#define SPI_CLK 25000 + +// SPI clock divisor value +// @see https://ucb-bar.gitbook.io/baremetal-ide/baremetal-ide/using-peripheral-devices/sifive-ips/serial-peripheral-interface-spi +#define SPI_DIV (((F_CLK * 1000) / SPI_CLK) / 2 - 1) static volatile uint32_t * const spi = (void *)(SPI_CTRL_ADDR); @@ -79,7 +88,9 @@ static inline void sd_cmd_end(void) static void sd_poweron(void) { long i; - REG32(spi, SPI_REG_SCKDIV) = (F_CLK / 300000UL); + // HACK: frequency change + + REG32(spi, SPI_REG_SCKDIV) = SPI_DIV; REG32(spi, SPI_REG_CSMODE) = SPI_CSMODE_OFF; for (i = 10; i > 0; i--) { sd_dummy(); @@ -171,12 +182,10 @@ static int copy(void) dputs("CMD18"); - kprintf("LOADING 0x%xB PAYLOAD\r\n", PAYLOAD_SIZE_B); + kprintf("LOADING 0x%x B PAYLOAD\r\n", PAYLOAD_SIZE_B); kprintf("LOADING "); - // TODO: Speed up SPI freq. (breaks between these two values) - //REG32(spi, SPI_REG_SCKDIV) = (F_CLK / 16666666UL); - REG32(spi, SPI_REG_SCKDIV) = (F_CLK / 5000000UL); + REG32(spi, SPI_REG_SCKDIV) = SPI_DIV; if (sd_cmd(0x52, BBL_PARTITION_START_SECTOR, 0xE1) != 0x00) { sd_cmd_end(); return 1; diff --git a/fpga/src/main/scala/arty/Configs.scala b/fpga/src/main/scala/arty/Configs.scala index 1cf7bfce..7f10b174 100644 --- a/fpga/src/main/scala/arty/Configs.scala +++ b/fpga/src/main/scala/arty/Configs.scala @@ -11,13 +11,14 @@ import freechips.rocketchip.tile._ import sifive.blocks.devices.uart._ -import testchipip.{SerialTLKey} +import testchipip.serdes.{SerialTLKey} import chipyard.{BuildSystem} // DOC include start: AbstractArty and Rocket class WithArtyTweaks extends Config( - new WithArtyResetHarnessBinder ++ + new WithArtyDebugResetHarnessBinder ++ + new WithArtyJTAGResetHarnessBinder ++ new WithArtyJTAGHarnessBinder ++ new WithArtyUARTHarnessBinder ++ new WithDebugResetPassthrough ++ @@ -26,8 +27,12 @@ class WithArtyTweaks extends Config( new chipyard.harness.WithAllClocksFromHarnessClockInstantiator ++ new chipyard.config.WithDTSTimebase(32000) ++ new chipyard.config.WithSystemBusFrequency(32) ++ + new chipyard.config.WithFrontBusFrequency(32) ++ + new chipyard.config.WithControlBusFrequency(32) ++ new chipyard.config.WithPeripheryBusFrequency(32) ++ - new testchipip.WithNoSerialTL + new chipyard.config.WithControlBusFrequency(32) ++ + new testchipip.serdes.WithNoSerialTL ++ + new testchipip.soc.WithNoScratchpads ) class TinyRocketArtyConfig extends Config( diff --git a/fpga/src/main/scala/arty/HarnessBinders.scala b/fpga/src/main/scala/arty/HarnessBinders.scala index 1d96cecf..39ddd204 100644 --- a/fpga/src/main/scala/arty/HarnessBinders.scala +++ b/fpga/src/main/scala/arty/HarnessBinders.scala @@ -11,68 +11,61 @@ import sifive.blocks.devices.pinctrl.{BasePin} import sifive.fpgashells.ip.xilinx.{IBUFG, IOBUF, PULLUP, PowerOnResetFPGAOnly} -import chipyard.harness.{ComposeHarnessBinder, OverrideHarnessBinder} -import chipyard.iobinders.JTAGChipIO +import chipyard.harness.{HarnessBinder} +import chipyard.iobinders._ -class WithArtyResetHarnessBinder extends ComposeHarnessBinder({ - (system: HasPeripheryDebug, th: ArtyFPGATestHarness, ports: Seq[Data]) => { - val resetPorts = ports.collect { case b: Bool => b } - require(resetPorts.size == 2) +class WithArtyDebugResetHarnessBinder extends HarnessBinder({ + case (th: Arty35THarness, port: DebugResetPort, chipId: Int) => { + th.dut_ndreset := port.io // Debug module reset + } +}) + +class WithArtyJTAGResetHarnessBinder extends HarnessBinder({ + case (th: Arty35THarness, port: JTAGResetPort, chipId: Int) => { + port.io := PowerOnResetFPGAOnly(th.clock_32MHz) // JTAG module reset + } +}) + +class WithArtyJTAGHarnessBinder extends HarnessBinder({ + case (th: Arty35THarness, port: JTAGPort, chipId: Int) => { + val jtag_wire = Wire(new JTAGIO) + jtag_wire.TDO.data := port.io.TDO + jtag_wire.TDO.driven := true.B + port.io.TCK := jtag_wire.TCK + port.io.TMS := jtag_wire.TMS + port.io.TDI := jtag_wire.TDI + + val io_jtag = Wire(new JTAGPins(() => new BasePin(), false)).suggestName("jtag") + + JTAGPinsFromPort(io_jtag, jtag_wire) + + io_jtag.TCK.i.ival := IBUFG(IOBUF(th.jd_2).asClock).asBool + + IOBUF(th.jd_5, io_jtag.TMS) + PULLUP(th.jd_5) + + IOBUF(th.jd_4, io_jtag.TDI) + PULLUP(th.jd_4) + + IOBUF(th.jd_0, io_jtag.TDO) + + // mimic putting a pullup on this line (part of reset vote) + th.SRST_n := IOBUF(th.jd_6) + PULLUP(th.jd_6) + + // ignore the po input + io_jtag.TCK.i.po.map(_ := DontCare) + io_jtag.TDI.i.po.map(_ := DontCare) + io_jtag.TMS.i.po.map(_ := DontCare) + io_jtag.TDO.i.po.map(_ := DontCare) + } +}) + +class WithArtyUARTHarnessBinder extends HarnessBinder({ + case (th: Arty35THarness, port: UARTPort, chipId: Int) => { withClockAndReset(th.clock_32MHz, th.ck_rst) { - // Debug module reset - th.dut_ndreset := resetPorts(0) - - // JTAG reset - resetPorts(1) := PowerOnResetFPGAOnly(th.clock_32MHz) - } - } -}) - -class WithArtyJTAGHarnessBinder extends OverrideHarnessBinder({ - (system: HasPeripheryDebug, th: ArtyFPGATestHarness, ports: Seq[Data]) => { - ports.map { - case j: JTAGChipIO => { - val jtag_wire = Wire(new JTAGIO) - jtag_wire.TDO.data := j.TDO - jtag_wire.TDO.driven := true.B - j.TCK := jtag_wire.TCK - j.TMS := jtag_wire.TMS - j.TDI := jtag_wire.TDI - - val io_jtag = Wire(new JTAGPins(() => new BasePin(), false)).suggestName("jtag") - - JTAGPinsFromPort(io_jtag, jtag_wire) - - io_jtag.TCK.i.ival := IBUFG(IOBUF(th.jd_2).asClock).asBool - - IOBUF(th.jd_5, io_jtag.TMS) - PULLUP(th.jd_5) - - IOBUF(th.jd_4, io_jtag.TDI) - PULLUP(th.jd_4) - - IOBUF(th.jd_0, io_jtag.TDO) - - // mimic putting a pullup on this line (part of reset vote) - th.SRST_n := IOBUF(th.jd_6) - PULLUP(th.jd_6) - - // ignore the po input - io_jtag.TCK.i.po.map(_ := DontCare) - io_jtag.TDI.i.po.map(_ := DontCare) - io_jtag.TMS.i.po.map(_ := DontCare) - io_jtag.TDO.i.po.map(_ := DontCare) - } - case b: Bool => - } - } -}) - -class WithArtyUARTHarnessBinder extends OverrideHarnessBinder({ - (system: HasPeripheryUARTModuleImp, th: ArtyFPGATestHarness, ports: Seq[UARTPortIO]) => { - withClockAndReset(th.clock_32MHz, th.ck_rst) { - IOBUF(th.uart_rxd_out, ports.head.txd) - ports.head.rxd := IOBUF(th.uart_txd_in) + IOBUF(th.uart_rxd_out, port.io.txd) + port.io.rxd := IOBUF(th.uart_txd_in) } } }) diff --git a/fpga/src/main/scala/arty/IOBinders.scala b/fpga/src/main/scala/arty/IOBinders.scala index da6c7318..eb3185f9 100644 --- a/fpga/src/main/scala/arty/IOBinders.scala +++ b/fpga/src/main/scala/arty/IOBinders.scala @@ -5,7 +5,7 @@ import chisel3.experimental.{IO} import freechips.rocketchip.devices.debug.{HasPeripheryDebug} -import chipyard.iobinders.{ComposeIOBinder} +import chipyard.iobinders.{ComposeIOBinder, DebugResetPort, JTAGResetPort} class WithDebugResetPassthrough extends ComposeIOBinder({ (system: HasPeripheryDebug) => { @@ -18,6 +18,6 @@ class WithDebugResetPassthrough extends ComposeIOBinder({ val io_sjtag_reset: Bool = IO(Input(Bool())).suggestName("sjtag_reset") sjtag.reset := io_sjtag_reset - (Seq(io_ndreset, io_sjtag_reset), Nil) + (Seq(DebugResetPort(() => io_ndreset), JTAGResetPort(() => io_sjtag_reset)), Nil) } }) diff --git a/fpga/src/main/scala/arty/TestHarness.scala b/fpga/src/main/scala/arty/TestHarness.scala index 2d524fe3..cdb1d4e4 100644 --- a/fpga/src/main/scala/arty/TestHarness.scala +++ b/fpga/src/main/scala/arty/TestHarness.scala @@ -9,9 +9,8 @@ import org.chipsalliance.cde.config.{Parameters} import sifive.fpgashells.shell.xilinx.artyshell.{ArtyShell} import chipyard.harness.{HasHarnessInstantiators} -import chipyard.iobinders.{HasIOBinders} -class ArtyFPGATestHarness(override implicit val p: Parameters) extends ArtyShell with HasHarnessInstantiators { +class Arty35THarness(override implicit val p: Parameters) extends ArtyShell with HasHarnessInstantiators { // Convert harness resets from Bool to Reset type. val hReset = Wire(Reset()) hReset := ~ck_rst diff --git a/fpga/src/main/scala/arty100t/Configs.scala b/fpga/src/main/scala/arty100t/Configs.scala index 4a0fb293..bb4b8e22 100644 --- a/fpga/src/main/scala/arty100t/Configs.scala +++ b/fpga/src/main/scala/arty100t/Configs.scala @@ -12,30 +12,34 @@ import freechips.rocketchip.tile._ import sifive.blocks.devices.uart._ import sifive.fpgashells.shell.{DesignKey} -import testchipip.{SerialTLKey} +import testchipip.serdes.{SerialTLKey} import chipyard.{BuildSystem} // don't use FPGAShell's DesignKey class WithNoDesignKey extends Config((site, here, up) => { - case DesignKey => (p: Parameters) => new SimpleLazyModule()(p) + case DesignKey => (p: Parameters) => new SimpleLazyRawModule()(p) }) -class WithArty100TTweaks extends Config( +// By default, this uses the on-board USB-UART for the TSI-over-UART link +// The PMODUART HarnessBinder maps the actual UART device to JD pin +class WithArty100TTweaks(freqMHz: Double = 50) extends Config( + new WithArty100TPMODUART ++ new WithArty100TUARTTSI ++ new WithArty100TDDRTL ++ + new WithArty100TJTAG ++ new WithNoDesignKey ++ - new testchipip.WithUARTTSIClient ++ + new testchipip.tsi.WithUARTTSIClient ++ new chipyard.harness.WithSerialTLTiedOff ++ - new chipyard.harness.WithHarnessBinderClockFreqMHz(50) ++ - new chipyard.config.WithMemoryBusFrequency(50.0) ++ - new chipyard.config.WithFrontBusFrequency(50.0) ++ - new chipyard.config.WithSystemBusFrequency(50.0) ++ - new chipyard.config.WithPeripheryBusFrequency(50.0) ++ + new chipyard.harness.WithHarnessBinderClockFreqMHz(freqMHz) ++ + new chipyard.config.WithMemoryBusFrequency(freqMHz) ++ + new chipyard.config.WithFrontBusFrequency(freqMHz) ++ + new chipyard.config.WithSystemBusFrequency(freqMHz) ++ + new chipyard.config.WithPeripheryBusFrequency(freqMHz) ++ + new chipyard.config.WithControlBusFrequency(freqMHz) ++ + new chipyard.config.WithOffchipBusFrequency(freqMHz) ++ new chipyard.harness.WithAllClocksFromHarnessClockInstantiator ++ new chipyard.clocking.WithPassthroughClockGenerator ++ - new chipyard.config.WithNoDebug ++ // no jtag - new chipyard.config.WithNoUART ++ // use UART for the UART-TSI thing instad new chipyard.config.WithTLBackingMemory ++ // FPGA-shells converts the AXI to TL for us new freechips.rocketchip.subsystem.WithExtMemSize(BigInt(256) << 20) ++ // 256mb on ARTY new freechips.rocketchip.subsystem.WithoutTLMonitors) @@ -45,22 +49,14 @@ class RocketArty100TConfig extends Config( new chipyard.config.WithBroadcastManager ++ // no l2 new chipyard.RocketConfig) -class UART230400RocketArty100TConfig extends Config( - new WithArty100TUARTTSI(uartBaudRate = 230400) ++ - new RocketArty100TConfig) - -class UART460800RocketArty100TConfig extends Config( - new WithArty100TUARTTSI(uartBaudRate = 460800) ++ - new RocketArty100TConfig) - -class UART921600RocketArty100TConfig extends Config( - new WithArty100TUARTTSI(uartBaudRate = 921600) ++ - new RocketArty100TConfig) - - class NoCoresArty100TConfig extends Config( new WithArty100TTweaks ++ - new chipyard.config.WithMemoryBusFrequency(50.0) ++ - new chipyard.config.WithPeripheryBusFrequency(50.0) ++ // Match the sbus and pbus frequency new chipyard.config.WithBroadcastManager ++ // no l2 new chipyard.NoCoresConfig) + +// This will fail to close timing above 50 MHz +class BringupArty100TConfig extends Config( + new WithArty100TSerialTLToGPIO ++ + new WithArty100TTweaks(freqMHz = 50) ++ + new testchipip.serdes.WithSerialTLPHYParams(testchipip.serdes.InternalSyncSerialParams(freqMHz=50)) ++ + new chipyard.ChipBringupHostConfig) diff --git a/fpga/src/main/scala/arty100t/Harness.scala b/fpga/src/main/scala/arty100t/Harness.scala index 47ffe7e0..30601124 100644 --- a/fpga/src/main/scala/arty100t/Harness.scala +++ b/fpga/src/main/scala/arty100t/Harness.scala @@ -5,19 +5,18 @@ import chisel3.util._ import freechips.rocketchip.diplomacy._ import org.chipsalliance.cde.config.{Parameters} import freechips.rocketchip.tilelink._ -import freechips.rocketchip.prci.{ClockBundle, ClockBundleParameters} +import freechips.rocketchip.prci._ import freechips.rocketchip.subsystem.{SystemBusKey} import sifive.fpgashells.shell.xilinx._ import sifive.fpgashells.shell._ -import sifive.fpgashells.clocks.{ClockGroup, ClockSinkNode, PLLFactoryKey, ResetWrangler} +import sifive.fpgashells.clocks._ import sifive.fpgashells.ip.xilinx.{IBUF, PowerOnResetFPGAOnly} import sifive.blocks.devices.uart._ import chipyard._ import chipyard.harness._ -import chipyard.iobinders.{HasIOBinders} class Arty100THarness(override implicit val p: Parameters) extends Arty100TShell { def dp = designParameters @@ -34,9 +33,6 @@ class Arty100THarness(override implicit val p: Parameters) extends Arty100TShell harnessSysPLLNode := clockOverlay.overlayOutput.node - val io_uart_bb = BundleBridgeSource(() => new UARTPortIO(dp(PeripheryUARTKey).headOption.getOrElse(UARTParams(0)))) - val uartOverlay = dp(UARTOverlayKey).head.place(UARTDesignInput(io_uart_bb)) - val ddrOverlay = dp(DDROverlayKey).head.place(DDRDesignInput(dp(ExtTLMem).get.master.base, dutWrangler.node, harnessSysPLLNode)).asInstanceOf[DDRArtyPlacedOverlay] val ddrClient = TLClientNode(Seq(TLMasterPortParameters.v1(Seq(TLMasterParameters.v1( name = "chip_ddr", @@ -80,6 +76,9 @@ class Arty100THarness(override implicit val p: Parameters) extends Arty100TShell def referenceReset = dutClock.in.head._1.reset def success = { require(false, "Unused"); false.B } + childClock := harnessBinderClock + childReset := harnessBinderReset + ddrOverlay.mig.module.clock := harnessBinderClock ddrOverlay.mig.module.reset := harnessBinderReset ddrBlockDuringReset.module.clock := harnessBinderClock diff --git a/fpga/src/main/scala/arty100t/HarnessBinders.scala b/fpga/src/main/scala/arty100t/HarnessBinders.scala index 060e3d8d..7b1640ba 100644 --- a/fpga/src/main/scala/arty100t/HarnessBinders.scala +++ b/fpga/src/main/scala/arty100t/HarnessBinders.scala @@ -1,6 +1,7 @@ package chipyard.fpga.arty100t import chisel3._ +import chisel3.experimental.{DataMirror, Direction} import freechips.rocketchip.jtag.{JTAGIO} import freechips.rocketchip.subsystem.{PeripheryBusKey} @@ -11,38 +12,138 @@ import freechips.rocketchip.diplomacy.{LazyRawModuleImp} import sifive.blocks.devices.uart.{UARTPortIO, HasPeripheryUARTModuleImp, UARTParams} import sifive.blocks.devices.jtag.{JTAGPins, JTAGPinsFromPort} import sifive.blocks.devices.pinctrl.{BasePin} - -import sifive.fpgashells.ip.xilinx.{IBUFG, IOBUF, PULLUP, PowerOnResetFPGAOnly} - +import sifive.fpgashells.shell._ +import sifive.fpgashells.ip.xilinx._ +import sifive.fpgashells.shell.xilinx._ +import sifive.fpgashells.clocks._ import chipyard._ import chipyard.harness._ -import chipyard.iobinders.JTAGChipIO +import chipyard.iobinders._ +import testchipip.serdes._ -import testchipip._ - -class WithArty100TUARTTSI(uartBaudRate: BigInt = 115200) extends OverrideHarnessBinder({ - (system: CanHavePeripheryUARTTSI, th: HasHarnessInstantiators, ports: Seq[UARTTSIIO]) => { - implicit val p = chipyard.iobinders.GetSystemParameters(system) - require(ports.size <= 1) +class WithArty100TUARTTSI extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: UARTTSIPort, chipId: Int) => { val ath = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[Arty100THarness] - ports.map({ port => - ath.io_uart_bb.bundle <> port.uart - ath.other_leds(1) := port.dropped - ath.other_leds(9) := port.tsi2tl_state(0) - ath.other_leds(10) := port.tsi2tl_state(1) - ath.other_leds(11) := port.tsi2tl_state(2) - ath.other_leds(12) := port.tsi2tl_state(3) - }) + val harnessIO = IO(new UARTPortIO(port.io.uartParams)).suggestName("uart_tsi") + harnessIO <> port.io.uart + val packagePinsWithPackageIOs = Seq( + ("A9" , IOPin(harnessIO.rxd)), + ("D10", IOPin(harnessIO.txd))) + packagePinsWithPackageIOs foreach { case (pin, io) => { + ath.xdc.addPackagePin(io, pin) + ath.xdc.addIOStandard(io, "LVCMOS33") + ath.xdc.addIOB(io) + } } + + ath.other_leds(1) := port.io.dropped + ath.other_leds(9) := port.io.tsi2tl_state(0) + ath.other_leds(10) := port.io.tsi2tl_state(1) + ath.other_leds(11) := port.io.tsi2tl_state(2) + ath.other_leds(12) := port.io.tsi2tl_state(3) } }) -class WithArty100TDDRTL extends OverrideHarnessBinder({ - (system: CanHaveMasterTLMemPort, th: HasHarnessInstantiators, ports: Seq[HeterogeneousBag[TLBundle]]) => { - require(ports.size == 1) + +class WithArty100TDDRTL extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: TLMemPort, chipId: Int) => { val artyTh = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[Arty100THarness] val bundles = artyTh.ddrClient.out.map(_._1) val ddrClientBundle = Wire(new HeterogeneousBag(bundles.map(_.cloneType))) bundles.zip(ddrClientBundle).foreach { case (bundle, io) => bundle <> io } - ddrClientBundle <> ports.head + ddrClientBundle <> port.io + } +}) + +// Uses PMOD JA/JB +class WithArty100TSerialTLToGPIO extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: SerialTLPort, chipId: Int) => { + val artyTh = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[Arty100THarness] + val harnessIO = IO(chiselTypeOf(port.io)).suggestName("serial_tl") + harnessIO <> port.io + + harnessIO match { + case io: DecoupledSerialIO => { + val clkIO = io match { + case io: InternalSyncSerialIO => IOPin(io.clock_out) + case io: ExternalSyncSerialIO => IOPin(io.clock_in) + } + val packagePinsWithPackageIOs = Seq( + ("G13", clkIO), + ("B11", IOPin(io.out.valid)), + ("A11", IOPin(io.out.ready)), + ("D12", IOPin(io.in.valid)), + ("D13", IOPin(io.in.ready)), + ("B18", IOPin(io.out.bits, 0)), + ("A18", IOPin(io.out.bits, 1)), + ("K16", IOPin(io.out.bits, 2)), + ("E15", IOPin(io.out.bits, 3)), + ("E16", IOPin(io.in.bits, 0)), + ("D15", IOPin(io.in.bits, 1)), + ("C15", IOPin(io.in.bits, 2)), + ("J17", IOPin(io.in.bits, 3)) + ) + packagePinsWithPackageIOs foreach { case (pin, io) => { + artyTh.xdc.addPackagePin(io, pin) + artyTh.xdc.addIOStandard(io, "LVCMOS33") + }} + + // Don't add IOB to the clock, if its an input + io match { + case io: InternalSyncSerialIO => packagePinsWithPackageIOs foreach { case (pin, io) => { + artyTh.xdc.addIOB(io) + }} + case io: ExternalSyncSerialIO => packagePinsWithPackageIOs.drop(1).foreach { case (pin, io) => { + artyTh.xdc.addIOB(io) + }} + } + + artyTh.sdc.addClock("ser_tl_clock", clkIO, 100) + artyTh.sdc.addGroup(pins = Seq(clkIO)) + artyTh.xdc.clockDedicatedRouteFalse(clkIO) + } + } + } +}) + +// Maps the UART device to the on-board USB-UART +class WithArty100TUART(rxdPin: String = "A9", txdPin: String = "D10") extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: UARTPort, chipId: Int) => { + val ath = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[Arty100THarness] + val harnessIO = IO(chiselTypeOf(port.io)).suggestName("uart") + harnessIO <> port.io + val packagePinsWithPackageIOs = Seq( + (rxdPin, IOPin(harnessIO.rxd)), + (txdPin, IOPin(harnessIO.txd))) + packagePinsWithPackageIOs foreach { case (pin, io) => { + ath.xdc.addPackagePin(io, pin) + ath.xdc.addIOStandard(io, "LVCMOS33") + ath.xdc.addIOB(io) + } } + } +}) + +// Maps the UART device to PMOD JD pins 3/7 +class WithArty100TPMODUART extends WithArty100TUART("G2", "F3") + +class WithArty100TJTAG extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: JTAGPort, chipId: Int) => { + val ath = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[Arty100THarness] + val harnessIO = IO(chiselTypeOf(port.io)).suggestName("jtag") + harnessIO <> port.io + + ath.sdc.addClock("JTCK", IOPin(harnessIO.TCK), 10) + ath.sdc.addGroup(clocks = Seq("JTCK")) + ath.xdc.clockDedicatedRouteFalse(IOPin(harnessIO.TCK)) + val packagePinsWithPackageIOs = Seq( + ("F4", IOPin(harnessIO.TCK)), + ("D2", IOPin(harnessIO.TMS)), + ("E2", IOPin(harnessIO.TDI)), + ("D4", IOPin(harnessIO.TDO)) + ) + packagePinsWithPackageIOs foreach { case (pin, io) => { + ath.xdc.addPackagePin(io, pin) + ath.xdc.addIOStandard(io, "LVCMOS33") + ath.xdc.addPullup(io) + } } } }) diff --git a/fpga/src/main/scala/nexysvideo/Configs.scala b/fpga/src/main/scala/nexysvideo/Configs.scala new file mode 100644 index 00000000..ce8fbae8 --- /dev/null +++ b/fpga/src/main/scala/nexysvideo/Configs.scala @@ -0,0 +1,74 @@ +// See LICENSE for license details. +package chipyard.fpga.nexysvideo + +import org.chipsalliance.cde.config._ +import freechips.rocketchip.subsystem._ +import freechips.rocketchip.devices.debug._ +import freechips.rocketchip.devices.tilelink._ +import freechips.rocketchip.diplomacy._ +import freechips.rocketchip.system._ +import freechips.rocketchip.tile._ + +import sifive.blocks.devices.uart._ +import sifive.fpgashells.shell.{DesignKey} + +import testchipip.serdes.{SerialTLKey} + +import chipyard.{BuildSystem} + +// don't use FPGAShell's DesignKey +class WithNoDesignKey extends Config((site, here, up) => { + case DesignKey => (p: Parameters) => new SimpleLazyRawModule()(p) +}) + +// DOC include start: WithNexysVideoTweaks and Rocket +class WithNexysVideoTweaks extends Config( + new WithNexysVideoUARTTSI ++ + new WithNexysVideoDDRTL ++ + new WithNoDesignKey ++ + new testchipip.tsi.WithUARTTSIClient ++ + new chipyard.harness.WithSerialTLTiedOff ++ + new chipyard.harness.WithHarnessBinderClockFreqMHz(50) ++ + new chipyard.config.WithMemoryBusFrequency(50.0) ++ + new chipyard.config.WithFrontBusFrequency(50.0) ++ + new chipyard.config.WithSystemBusFrequency(50.0) ++ + new chipyard.config.WithPeripheryBusFrequency(50.0) ++ + new chipyard.config.WithControlBusFrequency(50.0) ++ + new chipyard.harness.WithAllClocksFromHarnessClockInstantiator ++ + new chipyard.clocking.WithPassthroughClockGenerator ++ + new chipyard.config.WithNoDebug ++ // no jtag + new chipyard.config.WithNoUART ++ // use UART for the UART-TSI thing instad + new chipyard.config.WithTLBackingMemory ++ // FPGA-shells converts the AXI to TL for us + new freechips.rocketchip.subsystem.WithExtMemSize(BigInt(512) << 20) ++ // 512mb on Nexys Video + new freechips.rocketchip.subsystem.WithoutTLMonitors) + +class RocketNexysVideoConfig extends Config( + new WithNexysVideoTweaks ++ + new chipyard.config.WithBroadcastManager ++ // no l2 + new chipyard.RocketConfig) +// DOC include end: WithNexysVideoTweaks and Rocket + +// DOC include start: WithTinyNexysVideoTweaks and Rocket +class WithTinyNexysVideoTweaks extends Config( + new WithNexysVideoUARTTSI ++ + new WithNoDesignKey ++ + new sifive.fpgashells.shell.xilinx.WithNoNexysVideoShellDDR ++ // no DDR + new testchipip.tsi.WithUARTTSIClient ++ + new chipyard.harness.WithSerialTLTiedOff ++ + new chipyard.harness.WithHarnessBinderClockFreqMHz(50) ++ + new chipyard.config.WithMemoryBusFrequency(50.0) ++ + new chipyard.config.WithFrontBusFrequency(50.0) ++ + new chipyard.config.WithSystemBusFrequency(50.0) ++ + new chipyard.config.WithPeripheryBusFrequency(50.0) ++ + new chipyard.config.WithControlBusFrequency(50.0) ++ + new chipyard.harness.WithAllClocksFromHarnessClockInstantiator ++ + new chipyard.clocking.WithPassthroughClockGenerator ++ + new chipyard.config.WithNoDebug ++ // no jtag + new chipyard.config.WithNoUART ++ // use UART for the UART-TSI thing instad + new freechips.rocketchip.subsystem.WithoutTLMonitors) + +class TinyRocketNexysVideoConfig extends Config( + new WithTinyNexysVideoTweaks ++ + new chipyard.config.WithBroadcastManager ++ // no l2 + new chipyard.TinyRocketConfig) + // DOC include end: WithTinyNexysVideoTweaks and Rocket diff --git a/fpga/src/main/scala/nexysvideo/Harness.scala b/fpga/src/main/scala/nexysvideo/Harness.scala new file mode 100644 index 00000000..c9583f0e --- /dev/null +++ b/fpga/src/main/scala/nexysvideo/Harness.scala @@ -0,0 +1,91 @@ +// See LICENSE for license details. +package chipyard.fpga.nexysvideo + +import chisel3._ +import chisel3.util._ +import freechips.rocketchip.diplomacy._ +import org.chipsalliance.cde.config.{Parameters} +import freechips.rocketchip.tilelink._ +import freechips.rocketchip.subsystem.{SystemBusKey} +import freechips.rocketchip.prci._ +import sifive.fpgashells.shell.xilinx._ +import sifive.fpgashells.shell._ +import sifive.fpgashells.clocks._ + +import sifive.blocks.devices.uart._ + +import chipyard._ +import chipyard.harness._ + +class NexysVideoHarness(override implicit val p: Parameters) extends NexysVideoShell { + def dp = designParameters + + val clockOverlay = dp(ClockInputOverlayKey).map(_.place(ClockInputDesignInput())).head + val harnessSysPLL = dp(PLLFactoryKey) + val harnessSysPLLNode = harnessSysPLL() + val dutFreqMHz = (dp(SystemBusKey).dtsFrequency.get / (1000 * 1000)).toInt + val dutClock = ClockSinkNode(freqMHz = dutFreqMHz) + println(s"NexysVideo FPGA Base Clock Freq: ${dutFreqMHz} MHz") + val dutWrangler = LazyModule(new ResetWrangler()) + val dutGroup = ClockGroup() + dutClock := dutWrangler.node := dutGroup := harnessSysPLLNode + + harnessSysPLLNode := clockOverlay.overlayOutput.node + + val io_uart_bb = BundleBridgeSource(() => new UARTPortIO(dp(PeripheryUARTKey).headOption.getOrElse(UARTParams(0)))) + val uartOverlay = dp(UARTOverlayKey).head.place(UARTDesignInput(io_uart_bb)) + + // Optional DDR + val ddrOverlay = if (p(NexysVideoShellDDR)) Some(dp(DDROverlayKey).head.place(DDRDesignInput(dp(ExtTLMem).get.master.base, dutWrangler.node, harnessSysPLLNode)).asInstanceOf[DDRNexysVideoPlacedOverlay]) else None + val ddrClient = if (p(NexysVideoShellDDR)) Some(TLClientNode(Seq(TLMasterPortParameters.v1(Seq(TLMasterParameters.v1( + name = "chip_ddr", + sourceId = IdRange(0, 1 << dp(ExtTLMem).get.master.idBits) + )))))) else None + val ddrBlockDuringReset = if (p(NexysVideoShellDDR)) Some(LazyModule(new TLBlockDuringReset(4))) else None + if (p(NexysVideoShellDDR)) { ddrOverlay.get.overlayOutput.ddr := ddrBlockDuringReset.get.node := ddrClient.get } + + val ledOverlays = dp(LEDOverlayKey).map(_.place(LEDDesignInput())) + val all_leds = ledOverlays.map(_.overlayOutput.led) + val status_leds = all_leds.take(2) + val other_leds = all_leds.drop(2) + + + override lazy val module = new HarnessLikeImpl + + class HarnessLikeImpl extends Impl with HasHarnessInstantiators { + all_leds.foreach(_ := DontCare) + clockOverlay.overlayOutput.node.out(0)._1.reset := ~resetPin + + val clk_100mhz = clockOverlay.overlayOutput.node.out.head._1.clock + + // Blink the status LEDs for sanity + withClockAndReset(clk_100mhz, dutClock.in.head._1.reset) { + val period = (BigInt(100) << 20) / status_leds.size + val counter = RegInit(0.U(log2Ceil(period).W)) + val on = RegInit(0.U(log2Ceil(status_leds.size).W)) + status_leds.zipWithIndex.map { case (o,s) => o := on === s.U } + counter := Mux(counter === (period-1).U, 0.U, counter + 1.U) + when (counter === 0.U) { + on := Mux(on === (status_leds.size-1).U, 0.U, on + 1.U) + } + } + + other_leds(0) := resetPin + + harnessSysPLL.plls.foreach(_._1.getReset.get := pllReset) + + def referenceClockFreqMHz = dutFreqMHz + def referenceClock = dutClock.in.head._1.clock + def referenceReset = dutClock.in.head._1.reset + def success = { require(false, "Unused"); false.B } + + if (p(NexysVideoShellDDR)) { + ddrOverlay.get.mig.module.clock := harnessBinderClock + ddrOverlay.get.mig.module.reset := harnessBinderReset + ddrBlockDuringReset.get.module.clock := harnessBinderClock + ddrBlockDuringReset.get.module.reset := harnessBinderReset.asBool || !ddrOverlay.get.mig.module.io.port.init_calib_complete + } + + instantiateChipTops() + } +} diff --git a/fpga/src/main/scala/nexysvideo/HarnessBinders.scala b/fpga/src/main/scala/nexysvideo/HarnessBinders.scala new file mode 100644 index 00000000..29deeadb --- /dev/null +++ b/fpga/src/main/scala/nexysvideo/HarnessBinders.scala @@ -0,0 +1,37 @@ +// See LICENSE for license details. +package chipyard.fpga.nexysvideo + +import chisel3._ + +import freechips.rocketchip.subsystem.{PeripheryBusKey} +import freechips.rocketchip.tilelink.{TLBundle} +import freechips.rocketchip.util.{HeterogeneousBag} +import freechips.rocketchip.diplomacy.{LazyRawModuleImp} + +import sifive.blocks.devices.uart.{UARTParams} + +import chipyard._ +import chipyard.harness._ +import chipyard.iobinders._ + +class WithNexysVideoUARTTSI(uartBaudRate: BigInt = 115200) extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: UARTTSIPort, chipId: Int) => { + val nexysvideoth = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[NexysVideoHarness] + nexysvideoth.io_uart_bb.bundle <> port.io.uart + nexysvideoth.other_leds(1) := port.io.dropped + nexysvideoth.other_leds(2) := port.io.tsi2tl_state(0) + nexysvideoth.other_leds(3) := port.io.tsi2tl_state(1) + nexysvideoth.other_leds(4) := port.io.tsi2tl_state(2) + nexysvideoth.other_leds(5) := port.io.tsi2tl_state(3) + } +}) + +class WithNexysVideoDDRTL extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: TLMemPort, chipId: Int) => { + val nexysTh = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[NexysVideoHarness] + val bundles = nexysTh.ddrClient.get.out.map(_._1) + val ddrClientBundle = Wire(new HeterogeneousBag(bundles.map(_.cloneType))) + bundles.zip(ddrClientBundle).foreach { case (bundle, io) => bundle <> io } + ddrClientBundle <> port.io + } +}) diff --git a/fpga/src/main/scala/vc707/Configs.scala b/fpga/src/main/scala/vc707/Configs.scala index 55ce8e06..4842434e 100644 --- a/fpga/src/main/scala/vc707/Configs.scala +++ b/fpga/src/main/scala/vc707/Configs.scala @@ -15,7 +15,7 @@ import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTParams} import sifive.fpgashells.shell.{DesignKey} import sifive.fpgashells.shell.xilinx.{VC7074GDDRSize} -import testchipip.{SerialTLKey} +import testchipip.serdes.{SerialTLKey} import chipyard.{BuildSystem, ExtTLMem} import chipyard.harness._ @@ -35,7 +35,7 @@ class WithSystemModifications extends Config((site, here, up) => { p.copy(hang = 0x10000, contentFileName = s"./fpga/src/main/resources/vc707/sdboot/build/sdboot.bin") } case ExtMem => up(ExtMem, site).map(x => x.copy(master = x.master.copy(size = site(VC7074GDDRSize)))) // set extmem to DDR size (note the size) - case SerialTLKey => None // remove serialized tl port + case SerialTLKey => Nil // remove serialized tl port }) class WithVC707Tweaks extends Config ( @@ -45,6 +45,8 @@ class WithVC707Tweaks extends Config ( new chipyard.config.WithMemoryBusFrequency(50.0) ++ new chipyard.config.WithSystemBusFrequency(50.0) ++ new chipyard.config.WithPeripheryBusFrequency(50.0) ++ + new chipyard.config.WithControlBusFrequency(50.0) ++ + new chipyard.config.WithFrontBusFrequency(50.0) ++ new chipyard.harness.WithHarnessBinderClockFreqMHz(50) ++ new WithFPGAFrequency(50) ++ // default 50MHz freq @@ -53,10 +55,6 @@ class WithVC707Tweaks extends Config ( new WithVC707UARTHarnessBinder ++ new WithVC707SPISDCardHarnessBinder ++ new WithVC707DDRMemHarnessBinder ++ - // io binders - new WithUARTIOPassthrough ++ - new WithSPIIOPassthrough ++ - new WithTLIOPassthrough ++ // other configuration new WithDefaultPeripherals ++ new chipyard.config.WithTLBackingMemory ++ // use TL backing memory @@ -78,8 +76,11 @@ class BoomVC707Config extends Config ( ) class WithFPGAFrequency(fMHz: Double) extends Config ( - new chipyard.config.WithPeripheryBusFrequency(fMHz) ++ // assumes using PBUS as default freq. - new chipyard.config.WithMemoryBusFrequency(fMHz) + new chipyard.config.WithPeripheryBusFrequency(fMHz) ++ + new chipyard.config.WithMemoryBusFrequency(fMHz) ++ + new chipyard.config.WithSystemBusFrequency(fMHz) ++ + new chipyard.config.WithControlBusFrequency(fMHz) ++ + new chipyard.config.WithFrontBusFrequency(fMHz) ) class WithFPGAFreq25MHz extends WithFPGAFrequency(25) diff --git a/fpga/src/main/scala/vc707/HarnessBinders.scala b/fpga/src/main/scala/vc707/HarnessBinders.scala index cf5bbb5e..d08fba76 100644 --- a/fpga/src/main/scala/vc707/HarnessBinders.scala +++ b/fpga/src/main/scala/vc707/HarnessBinders.scala @@ -11,36 +11,29 @@ import sifive.blocks.devices.spi.{HasPeripherySPI, SPIPortIO} import sifive.fpgashells.devices.xilinx.xilinxvc707pciex1.{HasSystemXilinxVC707PCIeX1ModuleImp, XilinxVC707PCIeX1IO} import chipyard.{CanHaveMasterTLMemPort} -import chipyard.harness.{OverrideHarnessBinder} +import chipyard.harness.{HarnessBinder} +import chipyard.iobinders._ /*** UART ***/ -class WithVC707UARTHarnessBinder extends OverrideHarnessBinder({ - (system: HasPeripheryUARTModuleImp, th: BaseModule, ports: Seq[UARTPortIO]) => { - th match { case vc707th: VC707FPGATestHarnessImp => { - vc707th.vc707Outer.io_uart_bb.bundle <> ports.head - }} +class WithVC707UARTHarnessBinder extends HarnessBinder({ + case (th: VC707FPGATestHarnessImp, port: UARTPort, chipId: Int) => { + th.vc707Outer.io_uart_bb.bundle <> port.io } }) /*** SPI ***/ -class WithVC707SPISDCardHarnessBinder extends OverrideHarnessBinder({ - (system: HasPeripherySPI, th: BaseModule, ports: Seq[SPIPortIO]) => { - th match { case vc707th: VC707FPGATestHarnessImp => { - vc707th.vc707Outer.io_spi_bb.bundle <> ports.head - }} +class WithVC707SPISDCardHarnessBinder extends HarnessBinder({ + case (th: VC707FPGATestHarnessImp, port: SPIPort, chipId: Int) => { + th.vc707Outer.io_spi_bb.bundle <> port.io } }) /*** Experimental DDR ***/ -class WithVC707DDRMemHarnessBinder extends OverrideHarnessBinder({ - (system: CanHaveMasterTLMemPort, th: BaseModule, ports: Seq[HeterogeneousBag[TLBundle]]) => { - th match { case vc707th: VC707FPGATestHarnessImp => { - require(ports.size == 1) - - val bundles = vc707th.vc707Outer.ddrClient.out.map(_._1) - val ddrClientBundle = Wire(new HeterogeneousBag(bundles.map(_.cloneType))) - bundles.zip(ddrClientBundle).foreach { case (bundle, io) => bundle <> io } - ddrClientBundle <> ports.head - }} +class WithVC707DDRMemHarnessBinder extends HarnessBinder({ + case (th: VC707FPGATestHarnessImp, port: TLMemPort, chipId: Int) => { + val bundles = th.vc707Outer.ddrClient.out.map(_._1) + val ddrClientBundle = Wire(new HeterogeneousBag(bundles.map(_.cloneType))) + bundles.zip(ddrClientBundle).foreach { case (bundle, io) => bundle <> io } + ddrClientBundle <> port.io } }) diff --git a/fpga/src/main/scala/vc707/IOBinders.scala b/fpga/src/main/scala/vc707/IOBinders.scala deleted file mode 100644 index ad485571..00000000 --- a/fpga/src/main/scala/vc707/IOBinders.scala +++ /dev/null @@ -1,53 +0,0 @@ -package chipyard.fpga.vc707 - -import chisel3._ -import chisel3.experimental.{IO, DataMirror} - -import freechips.rocketchip.diplomacy.{ResourceBinding, Resource, ResourceAddress, InModuleBody} -import freechips.rocketchip.subsystem.{BaseSubsystem} -import freechips.rocketchip.util.{HeterogeneousBag} -import freechips.rocketchip.tilelink.{TLBundle} - -import sifive.blocks.devices.uart.{HasPeripheryUARTModuleImp} -import sifive.blocks.devices.spi.{HasPeripherySPI, HasPeripherySPIModuleImp, MMCDevice} -import sifive.fpgashells.devices.xilinx.xilinxvc707pciex1.{HasSystemXilinxVC707PCIeX1ModuleImp} - -import chipyard.{CanHaveMasterTLMemPort} -import chipyard.iobinders.{OverrideIOBinder, OverrideLazyIOBinder} - -class WithUARTIOPassthrough extends OverrideIOBinder({ - (system: HasPeripheryUARTModuleImp) => { - val io_uart_pins_temp = system.uart.zipWithIndex.map { case (dio, i) => IO(dio.cloneType).suggestName(s"uart_$i") } - (io_uart_pins_temp zip system.uart).map { case (io, sysio) => - io <> sysio - } - (io_uart_pins_temp, Nil) - } -}) - -class WithSPIIOPassthrough extends OverrideLazyIOBinder({ - (system: HasPeripherySPI) => { - // attach resource to 1st SPI - ResourceBinding { - Resource(new MMCDevice(system.tlSpiNodes.head.device, 1), "reg").bind(ResourceAddress(0)) - } - - InModuleBody { - system.asInstanceOf[BaseSubsystem].module match { case system: HasPeripherySPIModuleImp => { - val io_spi_pins_temp = system.spi.zipWithIndex.map { case (dio, i) => IO(dio.cloneType).suggestName(s"spi_$i") } - (io_spi_pins_temp zip system.spi).map { case (io, sysio) => - io <> sysio - } - (io_spi_pins_temp, Nil) - } } - } - } -}) - -class WithTLIOPassthrough extends OverrideIOBinder({ - (system: CanHaveMasterTLMemPort) => { - val io_tl_mem_pins_temp = IO(DataMirror.internal.chiselTypeClone[HeterogeneousBag[TLBundle]](system.mem_tl)).suggestName("tl_slave") - io_tl_mem_pins_temp <> system.mem_tl - (Seq(io_tl_mem_pins_temp), Nil) - } -}) diff --git a/fpga/src/main/scala/vc707/TestHarness.scala b/fpga/src/main/scala/vc707/TestHarness.scala index 008e2399..317dedf6 100644 --- a/fpga/src/main/scala/vc707/TestHarness.scala +++ b/fpga/src/main/scala/vc707/TestHarness.scala @@ -7,18 +7,18 @@ import org.chipsalliance.cde.config.{Parameters} import freechips.rocketchip.tilelink._ import freechips.rocketchip.subsystem.{SystemBusKey} import freechips.rocketchip.diplomacy.{IdRange, TransferSizes} +import freechips.rocketchip.prci._ import sifive.fpgashells.shell.xilinx.{VC707Shell, UARTVC707ShellPlacer, PCIeVC707ShellPlacer, ChipLinkVC707PlacedOverlay} import sifive.fpgashells.ip.xilinx.{IBUF, PowerOnResetFPGAOnly} import sifive.fpgashells.shell._ -import sifive.fpgashells.clocks.{ClockGroup, ClockSinkNode, PLLFactoryKey, ResetWrangler} +import sifive.fpgashells.clocks.{PLLFactoryKey} import sifive.fpgashells.devices.xilinx.xilinxvc707pciex1.{XilinxVC707PCIeX1IO} import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTPortIO} import sifive.blocks.devices.spi.{PeripherySPIKey, SPIPortIO} import chipyard._ -import chipyard.iobinders.{HasIOBinders} import chipyard.harness._ class VC707FPGATestHarness(override implicit val p: Parameters) extends VC707Shell { outer => @@ -88,6 +88,7 @@ class VC707FPGATestHarness(override implicit val p: Parameters) extends VC707She } class VC707FPGATestHarnessImp(_outer: VC707FPGATestHarness) extends LazyRawModuleImp(_outer) with HasHarnessInstantiators { + override def provideImplicitClockToLazyChildren = true val vc707Outer = _outer val reset = IO(Input(Bool())).suggestName("reset") diff --git a/fpga/src/main/scala/vcu118/Configs.scala b/fpga/src/main/scala/vcu118/Configs.scala index bd48fb4e..ff46deee 100644 --- a/fpga/src/main/scala/vcu118/Configs.scala +++ b/fpga/src/main/scala/vcu118/Configs.scala @@ -15,7 +15,7 @@ import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTParams} import sifive.fpgashells.shell.{DesignKey} import sifive.fpgashells.shell.xilinx.{VCU118ShellPMOD, VCU118DDRSize} -import testchipip.{SerialTLKey} +import testchipip.serdes.{SerialTLKey} import chipyard._ import chipyard.harness._ @@ -36,7 +36,7 @@ class WithSystemModifications extends Config((site, here, up) => { p.copy(hang = 0x10000, contentFileName = s"./fpga/src/main/resources/vcu118/sdboot/build/sdboot.bin") } case ExtMem => up(ExtMem, site).map(x => x.copy(master = x.master.copy(size = site(VCU118DDRSize)))) // set extmem to DDR size - case SerialTLKey => None // remove serialized tl port + case SerialTLKey => Nil // remove serialized tl port }) // DOC include start: AbstractVCU118 and Rocket @@ -46,15 +46,14 @@ class WithVCU118Tweaks extends Config( new chipyard.clocking.WithPassthroughClockGenerator ++ new chipyard.config.WithMemoryBusFrequency(100) ++ new chipyard.config.WithSystemBusFrequency(100) ++ + new chipyard.config.WithControlBusFrequency(100) ++ new chipyard.config.WithPeripheryBusFrequency(100) ++ + new chipyard.config.WithControlBusFrequency(100) ++ new WithFPGAFrequency(100) ++ // default 100MHz freq // harness binders new WithUART ++ new WithSPISDCard ++ new WithDDRMem ++ - // io binders - new WithUARTIOPassthrough ++ - new WithSPIIOPassthrough ++ // other configuration new WithDefaultPeripherals ++ new chipyard.config.WithTLBackingMemory ++ // use TL backing memory @@ -79,7 +78,9 @@ class BoomVCU118Config extends Config( class WithFPGAFrequency(fMHz: Double) extends Config( new chipyard.harness.WithHarnessBinderClockFreqMHz(fMHz) ++ new chipyard.config.WithSystemBusFrequency(fMHz) ++ - new chipyard.config.WithPeripheryBusFrequency(fMHz) ++ // assumes using PBUS as default freq. + new chipyard.config.WithPeripheryBusFrequency(fMHz) ++ + new chipyard.config.WithControlBusFrequency(fMHz) ++ + new chipyard.config.WithFrontBusFrequency(fMHz) ++ new chipyard.config.WithMemoryBusFrequency(fMHz) ) diff --git a/fpga/src/main/scala/vcu118/CustomOverlays.scala b/fpga/src/main/scala/vcu118/CustomOverlays.scala index 02669b79..473a015d 100644 --- a/fpga/src/main/scala/vcu118/CustomOverlays.scala +++ b/fpga/src/main/scala/vcu118/CustomOverlays.scala @@ -5,7 +5,7 @@ import chisel3._ import freechips.rocketchip.diplomacy._ import org.chipsalliance.cde.config.{Parameters, Field} import freechips.rocketchip.tilelink.{TLInwardNode, TLAsyncCrossingSink} - +import freechips.rocketchip.prci._ import sifive.fpgashells.shell._ import sifive.fpgashells.ip.xilinx._ import sifive.fpgashells.shell.xilinx._ @@ -79,7 +79,7 @@ class DDR2VCU118PlacedOverlay(val shell: VCU118FPGATestHarness, name: String, va ui.reset := /*!port.mmcm_locked ||*/ port.c0_ddr4_ui_clk_sync_rst port.c0_sys_clk_i := sys.clock.asUInt port.sys_rst := sys.reset // pllReset - port.c0_ddr4_aresetn := !ar.reset + port.c0_ddr4_aresetn := !(ar.reset.asBool) // This was just copied from the SiFive example, but it's hard to follow. // The pins are emitted in the following order: diff --git a/fpga/src/main/scala/vcu118/HarnessBinders.scala b/fpga/src/main/scala/vcu118/HarnessBinders.scala index f17b654f..c03f551f 100644 --- a/fpga/src/main/scala/vcu118/HarnessBinders.scala +++ b/fpga/src/main/scala/vcu118/HarnessBinders.scala @@ -11,35 +11,28 @@ import sifive.blocks.devices.spi.{HasPeripherySPI, SPIPortIO} import chipyard._ import chipyard.harness._ +import chipyard.iobinders._ /*** UART ***/ -class WithUART extends OverrideHarnessBinder({ - (system: HasPeripheryUARTModuleImp, th: BaseModule with HasHarnessInstantiators, ports: Seq[UARTPortIO]) => { - th match { case vcu118th: VCU118FPGATestHarnessImp => { - vcu118th.vcu118Outer.io_uart_bb.bundle <> ports.head - } } +class WithUART extends HarnessBinder({ + case (th: VCU118FPGATestHarnessImp, port: UARTPort, chipId: Int) => { + th.vcu118Outer.io_uart_bb.bundle <> port.io } }) /*** SPI ***/ -class WithSPISDCard extends OverrideHarnessBinder({ - (system: HasPeripherySPI, th: BaseModule with HasHarnessInstantiators, ports: Seq[SPIPortIO]) => { - th match { case vcu118th: VCU118FPGATestHarnessImp => { - vcu118th.vcu118Outer.io_spi_bb.bundle <> ports.head - } } +class WithSPISDCard extends HarnessBinder({ + case (th: VCU118FPGATestHarnessImp, port: SPIPort, chipId: Int) => { + th.vcu118Outer.io_spi_bb.bundle <> port.io } }) /*** Experimental DDR ***/ -class WithDDRMem extends OverrideHarnessBinder({ - (system: CanHaveMasterTLMemPort, th: BaseModule with HasHarnessInstantiators, ports: Seq[HeterogeneousBag[TLBundle]]) => { - th match { case vcu118th: VCU118FPGATestHarnessImp => { - require(ports.size == 1) - - val bundles = vcu118th.vcu118Outer.ddrClient.out.map(_._1) - val ddrClientBundle = Wire(new HeterogeneousBag(bundles.map(_.cloneType))) - bundles.zip(ddrClientBundle).foreach { case (bundle, io) => bundle <> io } - ddrClientBundle <> ports.head - } } +class WithDDRMem extends HarnessBinder({ + case (th: VCU118FPGATestHarnessImp, port: TLMemPort, chipId: Int) => { + val bundles = th.vcu118Outer.ddrClient.out.map(_._1) + val ddrClientBundle = Wire(new HeterogeneousBag(bundles.map(_.cloneType))) + bundles.zip(ddrClientBundle).foreach { case (bundle, io) => bundle <> io } + ddrClientBundle <> port.io } }) diff --git a/fpga/src/main/scala/vcu118/IOBinders.scala b/fpga/src/main/scala/vcu118/IOBinders.scala deleted file mode 100644 index 279f9865..00000000 --- a/fpga/src/main/scala/vcu118/IOBinders.scala +++ /dev/null @@ -1,44 +0,0 @@ -package chipyard.fpga.vcu118 - -import chisel3._ -import chisel3.experimental.{IO, DataMirror} - -import freechips.rocketchip.diplomacy.{ResourceBinding, Resource, ResourceAddress, InModuleBody} -import freechips.rocketchip.subsystem.{BaseSubsystem} -import freechips.rocketchip.util.{HeterogeneousBag} -import freechips.rocketchip.tilelink.{TLBundle} - -import sifive.blocks.devices.uart.{HasPeripheryUARTModuleImp} -import sifive.blocks.devices.spi.{HasPeripherySPI, HasPeripherySPIModuleImp, MMCDevice} - -import chipyard.{CanHaveMasterTLMemPort} -import chipyard.iobinders.{OverrideIOBinder, OverrideLazyIOBinder} - -class WithUARTIOPassthrough extends OverrideIOBinder({ - (system: HasPeripheryUARTModuleImp) => { - val io_uart_pins_temp = system.uart.zipWithIndex.map { case (dio, i) => IO(dio.cloneType).suggestName(s"uart_$i") } - (io_uart_pins_temp zip system.uart).map { case (io, sysio) => - io <> sysio - } - (io_uart_pins_temp, Nil) - } -}) - -class WithSPIIOPassthrough extends OverrideLazyIOBinder({ - (system: HasPeripherySPI) => { - // attach resource to 1st SPI - ResourceBinding { - Resource(new MMCDevice(system.tlSpiNodes.head.device, 1), "reg").bind(ResourceAddress(0)) - } - - InModuleBody { - system.asInstanceOf[BaseSubsystem].module match { case system: HasPeripherySPIModuleImp => { - val io_spi_pins_temp = system.spi.zipWithIndex.map { case (dio, i) => IO(dio.cloneType).suggestName(s"spi_$i") } - (io_spi_pins_temp zip system.spi).map { case (io, sysio) => - io <> sysio - } - (io_spi_pins_temp, Nil) - } } - } - } -}) diff --git a/fpga/src/main/scala/vcu118/TestHarness.scala b/fpga/src/main/scala/vcu118/TestHarness.scala index 6bffc9a7..78dee3e6 100644 --- a/fpga/src/main/scala/vcu118/TestHarness.scala +++ b/fpga/src/main/scala/vcu118/TestHarness.scala @@ -8,17 +8,16 @@ import org.chipsalliance.cde.config.{Parameters} import freechips.rocketchip.tilelink._ import freechips.rocketchip.diplomacy.{IdRange, TransferSizes} import freechips.rocketchip.subsystem.{SystemBusKey} - +import freechips.rocketchip.prci._ import sifive.fpgashells.shell.xilinx._ import sifive.fpgashells.ip.xilinx.{IBUF, PowerOnResetFPGAOnly} import sifive.fpgashells.shell._ -import sifive.fpgashells.clocks.{ClockGroup, ClockSinkNode, PLLFactoryKey, ResetWrangler} +import sifive.fpgashells.clocks._ import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTPortIO} import sifive.blocks.devices.spi.{PeripherySPIKey, SPIPortIO} import chipyard._ -import chipyard.iobinders.{HasIOBinders} import chipyard.harness._ class VCU118FPGATestHarness(override implicit val p: Parameters) extends VCU118ShellBasicOverlays { @@ -91,6 +90,7 @@ class VCU118FPGATestHarness(override implicit val p: Parameters) extends VCU118S } class VCU118FPGATestHarnessImp(_outer: VCU118FPGATestHarness) extends LazyRawModuleImp(_outer) with HasHarnessInstantiators { + override def provideImplicitClockToLazyChildren = true val vcu118Outer = _outer val reset = IO(Input(Bool())).suggestName("reset") diff --git a/fpga/src/main/scala/vcu118/bringup/Configs.scala b/fpga/src/main/scala/vcu118/bringup/Configs.scala index bff715dc..0760fa72 100644 --- a/fpga/src/main/scala/vcu118/bringup/Configs.scala +++ b/fpga/src/main/scala/vcu118/bringup/Configs.scala @@ -15,11 +15,12 @@ import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTParams} import sifive.fpgashells.shell.{DesignKey} import sifive.fpgashells.shell.xilinx.{VCU118ShellPMOD, VCU118DDRSize} -import testchipip.{PeripheryTSIHostKey, TSIHostParams, TSIHostSerdesParams} +import testchipip.tsi.{PeripheryTSIHostKey, TSIHostParams, TSIHostSerdesParams} import chipyard.{BuildSystem} import chipyard.fpga.vcu118.{WithVCU118Tweaks, WithFPGAFrequency, VCU118DDR2Size} +import chipyard.iobinders.{WithGPIOPunchthrough} class WithBringupPeripherals extends Config((site, here, up) => { case PeripheryUARTKey => up(PeripheryUARTKey, site) ++ List(UARTParams(address = BigInt(0x64003000L))) @@ -80,8 +81,7 @@ class WithBringupAdditions extends Config( new WithBringupGPIO ++ new WithBringupTSIHost ++ new WithTSITLIOPassthrough ++ - new WithI2CIOPassthrough ++ - new WithGPIOIOPassthrough ++ + new WithGPIOPunchthrough ++ new WithBringupPeripherals ++ new WithBringupVCU118System) diff --git a/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala b/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala index 4b9604f9..a52a1b5e 100644 --- a/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala +++ b/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala @@ -13,7 +13,7 @@ import sifive.fpgashells.shell.xilinx._ import sifive.fpgashells.clocks._ import sifive.fpgashells.devices.xilinx.xilinxvcu118mig.{XilinxVCU118MIGPads, XilinxVCU118MIGParams, XilinxVCU118MIG} -import testchipip.{TSIHostWidgetIO} +import testchipip.tsi.{TSIHostWidgetIO} import chipyard.fpga.vcu118.{FMCPMap} diff --git a/fpga/src/main/scala/vcu118/bringup/DigitalTop.scala b/fpga/src/main/scala/vcu118/bringup/DigitalTop.scala index c5401d32..e4efbdc7 100644 --- a/fpga/src/main/scala/vcu118/bringup/DigitalTop.scala +++ b/fpga/src/main/scala/vcu118/bringup/DigitalTop.scala @@ -17,7 +17,7 @@ import chipyard.{DigitalTop, DigitalTopModule} class BringupVCU118DigitalTop(implicit p: Parameters) extends DigitalTop with sifive.blocks.devices.i2c.HasPeripheryI2C - with testchipip.HasPeripheryTSIHostWidget + with testchipip.tsi.HasPeripheryTSIHostWidget { override lazy val module = new BringupVCU118DigitalTopModule(this) } diff --git a/fpga/src/main/scala/vcu118/bringup/HarnessBinders.scala b/fpga/src/main/scala/vcu118/bringup/HarnessBinders.scala index 97d62ae2..27933bf6 100644 --- a/fpga/src/main/scala/vcu118/bringup/HarnessBinders.scala +++ b/fpga/src/main/scala/vcu118/bringup/HarnessBinders.scala @@ -11,59 +11,41 @@ import sifive.blocks.devices.spi.{HasPeripherySPI, SPIPortIO} import sifive.blocks.devices.i2c.{HasPeripheryI2CModuleImp, I2CPort} import sifive.blocks.devices.gpio.{HasPeripheryGPIOModuleImp, GPIOPortIO} -import testchipip.{HasPeripheryTSIHostWidget, TSIHostWidgetIO} +import testchipip.tsi.{HasPeripheryTSIHostWidget, TSIHostWidgetIO} import chipyard.harness._ +import chipyard.iobinders._ /*** UART ***/ -class WithBringupUART extends ComposeHarnessBinder({ - (system: HasPeripheryUARTModuleImp, th: BaseModule with HasHarnessInstantiators, ports: Seq[UARTPortIO]) => { - th match { case vcu118th: BringupVCU118FPGATestHarnessImp => { - require(ports.size == 2) - - vcu118th.bringupOuter.io_fmc_uart_bb.bundle <> ports.last - } } +class WithBringupUART extends HarnessBinder({ + case (th: BringupVCU118FPGATestHarnessImp, port: UARTPort, chipId: Int) => { + th.bringupOuter.io_fmc_uart_bb.bundle <> port.io } }) /*** I2C ***/ -class WithBringupI2C extends OverrideHarnessBinder({ - (system: HasPeripheryI2CModuleImp, th: BaseModule with HasHarnessInstantiators, ports: Seq[I2CPort]) => { - th match { case vcu118th: BringupVCU118FPGATestHarnessImp => { - require(ports.size == 1) - - vcu118th.bringupOuter.io_i2c_bb.bundle <> ports.head - } } +class WithBringupI2C extends HarnessBinder({ + case (th: BringupVCU118FPGATestHarnessImp, port: chipyard.iobinders.I2CPort, chipId: Int) => { + th.bringupOuter.io_i2c_bb.bundle <> port.io } }) /*** GPIO ***/ -class WithBringupGPIO extends OverrideHarnessBinder({ - (system: HasPeripheryGPIOModuleImp, th: BaseModule with HasHarnessInstantiators, ports: Seq[GPIOPortIO]) => { - th match { case vcu118th: BringupVCU118FPGATestHarnessImp => { - (vcu118th.bringupOuter.io_gpio_bb zip ports).map { case (bb_io, dut_io) => - bb_io.bundle <> dut_io - } - } } +class WithBringupGPIO extends HarnessBinder({ + case (th: BringupVCU118FPGATestHarnessImp, port: GPIOPort, chipId: Int) => { + th.bringupOuter.io_gpio_bb(port.pinId).bundle <> port.io } }) /*** TSI Host Widget ***/ -class WithBringupTSIHost extends OverrideHarnessBinder({ - (system: HasPeripheryTSIHostWidget, th: BaseModule with HasHarnessInstantiators, ports: Seq[Data]) => { - th match { case vcu118th: BringupVCU118FPGATestHarnessImp => { - require(ports.size == 2) // 1st goes to the TL mem, 2nd goes to the serial link - - ports.head match { case tlPort: HeterogeneousBag[TLBundle] => - val tsiBundles = vcu118th.bringupOuter.tsiDdrClient.out.map(_._1) - val tsiDdrClientBundle = Wire(new HeterogeneousBag(tsiBundles.map(_.cloneType))) - tsiBundles.zip(tsiDdrClientBundle).foreach { case (bundle, io) => bundle <> io } - tsiDdrClientBundle <> tlPort - } - - ports.last match { case serialPort: TSIHostWidgetIO => - vcu118th.bringupOuter.io_tsi_serial_bb.bundle <> serialPort - } - } } +class WithBringupTSIHost extends HarnessBinder({ + case (th: BringupVCU118FPGATestHarnessImp, port: TLMemPort, chipId: Int) => { + val tsiBundles = th.bringupOuter.tsiDdrClient.out.map(_._1) + val tsiDdrClientBundle = Wire(new HeterogeneousBag(tsiBundles.map(_.cloneType))) + tsiBundles.zip(tsiDdrClientBundle).foreach { case (bundle, io) => bundle <> io } + tsiDdrClientBundle <> port.io + } + case (th: BringupVCU118FPGATestHarnessImp, port: TSIHostWidgetPort, chipId: Int) => { + th.bringupOuter.io_tsi_serial_bb.bundle <> port.io } }) diff --git a/fpga/src/main/scala/vcu118/bringup/IOBinders.scala b/fpga/src/main/scala/vcu118/bringup/IOBinders.scala index 87763cde..24b7aa9a 100644 --- a/fpga/src/main/scala/vcu118/bringup/IOBinders.scala +++ b/fpga/src/main/scala/vcu118/bringup/IOBinders.scala @@ -9,29 +9,12 @@ import freechips.rocketchip.tilelink.{TLBundle} import sifive.blocks.devices.gpio.{HasPeripheryGPIOModuleImp} import sifive.blocks.devices.i2c.{HasPeripheryI2CModuleImp} -import testchipip.{HasPeripheryTSIHostWidget, TSIHostWidgetIO} +import testchipip.tsi.{HasPeripheryTSIHostWidget, TSIHostWidgetIO} -import chipyard.iobinders.{OverrideIOBinder} +import chipyard.iobinders.{OverrideIOBinder, Port, TLMemPort} -class WithGPIOIOPassthrough extends OverrideIOBinder({ - (system: HasPeripheryGPIOModuleImp) => { - val io_gpio_pins_temp = system.gpio.zipWithIndex.map { case (dio, i) => IO(dio.cloneType).suggestName(s"gpio_$i") } - (io_gpio_pins_temp zip system.gpio).map { case (io, sysio) => - io <> sysio - } - (io_gpio_pins_temp, Nil) - } -}) - -class WithI2CIOPassthrough extends OverrideIOBinder({ - (system: HasPeripheryI2CModuleImp) => { - val io_i2c_pins_temp = system.i2c.zipWithIndex.map { case (dio, i) => IO(dio.cloneType).suggestName(s"i2c_$i") } - (io_i2c_pins_temp zip system.i2c).map { case (io, sysio) => - io <> sysio - } - (io_i2c_pins_temp, Nil) - } -}) +case class TSIHostWidgetPort(val getIO: () => TSIHostWidgetIO) + extends Port[TSIHostWidgetIO] class WithTSITLIOPassthrough extends OverrideIOBinder({ (system: HasPeripheryTSIHostWidget) => { @@ -42,6 +25,6 @@ class WithTSITLIOPassthrough extends OverrideIOBinder({ require(system.tsiSerial.size == 1) val io_tsi_serial_pins_temp = IO(DataMirror.internal.chiselTypeClone[TSIHostWidgetIO](system.tsiSerial.head)).suggestName("tsi_serial") io_tsi_serial_pins_temp <> system.tsiSerial.head - (Seq(io_tsi_tl_mem_pins_temp, io_tsi_serial_pins_temp), Nil) + (Seq(TLMemPort(() => io_tsi_tl_mem_pins_temp), TSIHostWidgetPort(() => io_tsi_serial_pins_temp)), Nil) } }) diff --git a/fpga/src/main/scala/vcu118/bringup/TestHarness.scala b/fpga/src/main/scala/vcu118/bringup/TestHarness.scala index 12398d8f..3de1e595 100644 --- a/fpga/src/main/scala/vcu118/bringup/TestHarness.scala +++ b/fpga/src/main/scala/vcu118/bringup/TestHarness.scala @@ -5,7 +5,7 @@ import freechips.rocketchip.diplomacy._ import org.chipsalliance.cde.config._ import freechips.rocketchip.subsystem._ import freechips.rocketchip.tilelink._ - +import freechips.rocketchip.prci._ import sifive.fpgashells.shell.xilinx._ import sifive.fpgashells.ip.xilinx._ import sifive.fpgashells.shell._ @@ -16,7 +16,8 @@ import sifive.blocks.devices.spi._ import sifive.blocks.devices.i2c._ import sifive.blocks.devices.gpio._ -import testchipip.{HasPeripheryTSIHostWidget, PeripheryTSIHostKey, TSIHostWidgetIO, TLSinkSetter} +import testchipip.tsi.{HasPeripheryTSIHostWidget, PeripheryTSIHostKey, TSIHostWidgetIO} +import testchipip.util.{TLSinkSetter} import chipyard.fpga.vcu118.{VCU118FPGATestHarness, VCU118FPGATestHarnessImp, DDR2VCU118ShellPlacer, SysClock2VCU118ShellPlacer} diff --git a/generators/bar-fetchers b/generators/bar-fetchers index a5bd985d..12d1506f 160000 --- a/generators/bar-fetchers +++ b/generators/bar-fetchers @@ -1 +1 @@ -Subproject commit a5bd985d29b07940e326d78964b370fa1cefec71 +Subproject commit 12d1506f610048906d2407b40a706923cbe6571e diff --git a/generators/boom b/generators/boom index 96da674b..9459af0c 160000 --- a/generators/boom +++ b/generators/boom @@ -1 +1 @@ -Subproject commit 96da674bc97955e7fa068f0a9a1d0a7a479d1d0b +Subproject commit 9459af0c1f6847f8411622dac770ac78fe10847c diff --git a/generators/caliptra-aes-acc b/generators/caliptra-aes-acc new file mode 160000 index 00000000..8bcd6b6b --- /dev/null +++ b/generators/caliptra-aes-acc @@ -0,0 +1 @@ +Subproject commit 8bcd6b6bc118e7bb493ed7cf2fed0472624f9093 diff --git a/generators/chipyard/src/main/resources/csrc/spiketile.cc b/generators/chipyard/src/main/resources/csrc/spiketile.cc index 3b14079b..dd02d55e 100644 --- a/generators/chipyard/src/main/resources/csrc/spiketile.cc +++ b/generators/chipyard/src/main/resources/csrc/spiketile.cc @@ -12,7 +12,7 @@ #if __has_include("spiketile_tsi.h") #define SPIKETILE_HTIF_TSI -extern htif_t* tsi; +extern std::map tsis; #endif #if __has_include("spiketile_dtm.h") #define SPIKETILE_HTIF_DTM @@ -346,8 +346,8 @@ extern "C" void spike_tile(int hartid, char* isa, chipyard_simif_t* simif = tile->simif; processor_t* proc = tile->proc; #if defined(SPIKETILE_HTIF_TSI) - if (!simif->htif && tsi) - simif->htif = tsi; + if (!simif->htif && tsis.size() > 0 && tsis[0]) + simif->htif = tsis[0]; #endif #if defined(SPIKETILE_HTIF_DTM) if (!simif->htif && dtm) @@ -447,18 +447,6 @@ chipyard_simif_t::chipyard_simif_t(size_t icache_ways, use_stq(false), htif(nullptr), fast_clint(false), - cfg(std::make_pair(0, 0), - nullptr, - isastr, - "MSU", - "vlen:128,elen:64", - false, - endianness_little, - pmpregions, - std::vector(), - std::vector(), - false, - 0), accessed_tofrom_host(false), icache_ways(icache_ways), icache_sets(icache_sets), @@ -470,6 +458,19 @@ chipyard_simif_t::chipyard_simif_t(size_t icache_ways, mmio_inflight(false) { + cfg.initrd_bounds = std::make_pair(0, 0); + cfg.bootargs = nullptr; + cfg.isa = isastr; + cfg.priv = "MSU"; + cfg.varch = "vlen:128,elen:64"; + cfg.misaligned = false; + cfg.endianness = endianness_little; + cfg.pmpregions = pmpregions; + cfg.mem_layout = std::vector(); + cfg.hartids = std::vector(); + cfg.explicit_hartids = false; + cfg.trigger_count = 0; + icache.resize(icache_ways); for (auto &w : icache) { w.resize(icache_sets); diff --git a/generators/chipyard/src/main/scala/ChipTop.scala b/generators/chipyard/src/main/scala/ChipTop.scala index 150221b6..d80d71af 100644 --- a/generators/chipyard/src/main/scala/ChipTop.scala +++ b/generators/chipyard/src/main/scala/ChipTop.scala @@ -5,10 +5,9 @@ import chisel3._ import scala.collection.mutable.{ArrayBuffer} import freechips.rocketchip.prci.{ClockGroupIdentityNode, ClockSinkParameters, ClockSinkNode, ClockGroup} -import freechips.rocketchip.subsystem.{BaseSubsystem, SubsystemDriveAsyncClockGroupsKey} import org.chipsalliance.cde.config.{Parameters, Field} import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp, LazyRawModuleImp, LazyModuleImpLike, BindingScope} -import freechips.rocketchip.util.{ResetCatchAndSync} +import freechips.rocketchip.util.{DontTouch} import chipyard.iobinders._ import barstools.iocell.chisel._ @@ -31,5 +30,5 @@ class ChipTop(implicit p: Parameters) extends LazyModule with BindingScope // of ChipTop (ex: ClockGroup) do not receive clock or reset. // However. anonymous children of ChipTop should not need an implicit Clock or Reset // anyways, they probably need to be explicitly clocked. - lazy val module: LazyModuleImpLike = new LazyRawModuleImp(this) { } + lazy val module: LazyModuleImpLike = new LazyRawModuleImp(this) with DontTouch { } } diff --git a/generators/chipyard/src/main/scala/DigitalTop.scala b/generators/chipyard/src/main/scala/DigitalTop.scala index 1316d786..d00a26ce 100644 --- a/generators/chipyard/src/main/scala/DigitalTop.scala +++ b/generators/chipyard/src/main/scala/DigitalTop.scala @@ -13,13 +13,14 @@ import freechips.rocketchip.devices.tilelink._ // DOC include start: DigitalTop class DigitalTop(implicit p: Parameters) extends ChipyardSystem - with testchipip.CanHavePeripheryUARTTSI // Enables optional UART-based TSI transport - with testchipip.CanHavePeripheryCustomBootPin // Enables optional custom boot pin - with testchipip.CanHavePeripheryBootAddrReg // Use programmable boot address register - with testchipip.CanHaveTraceIO // Enables optionally adding trace IO - with testchipip.CanHaveBankedScratchpad // Enables optionally adding a banked scratchpad - with testchipip.CanHavePeripheryBlockDevice // Enables optionally adding the block device - with testchipip.CanHavePeripheryTLSerial // Enables optionally adding the backing memory and serial adapter + with testchipip.tsi.CanHavePeripheryUARTTSI // Enables optional UART-based TSI transport + with testchipip.boot.CanHavePeripheryCustomBootPin // Enables optional custom boot pin + with testchipip.boot.CanHavePeripheryBootAddrReg // Use programmable boot address register + with testchipip.cosim.CanHaveTraceIO // Enables optionally adding trace IO + with testchipip.soc.CanHaveBankedScratchpad // Enables optionally adding a banked scratchpad + with testchipip.iceblk.CanHavePeripheryBlockDevice // Enables optionally adding the block device + with testchipip.serdes.CanHavePeripheryTLSerial // Enables optionally adding the backing memory and serial adapter + with testchipip.soc.CanHavePeripheryChipIdPin // Enables optional pin to set chip id for multi-chip configs with sifive.blocks.devices.i2c.HasPeripheryI2C // Enables optionally adding the sifive I2C with sifive.blocks.devices.pwm.HasPeripheryPWM // Enables optionally adding the sifive PWM with sifive.blocks.devices.uart.HasPeripheryUART // Enables optionally adding the sifive UART @@ -39,6 +40,7 @@ class DigitalTop(implicit p: Parameters) extends ChipyardSystem with chipyard.example.CanHavePeripheryStreamingPassthrough // Enables optionally adding the DSPTools streaming-passthrough example widget with nvidia.blocks.dla.CanHavePeripheryNVDLA // Enables optionally having an NVDLA with chipyard.clocking.HasChipyardPRCI // Use Chipyard reset/clock distribution + with chipyard.clocking.CanHaveClockTap // Enables optionally adding a clock tap output port with fftgenerator.CanHavePeripheryFFT // Enables optionally having an MMIO-based FFT block with constellation.soc.CanHaveGlobalNoC // Support instantiating a global NoC interconnect { @@ -46,7 +48,6 @@ class DigitalTop(implicit p: Parameters) extends ChipyardSystem } class DigitalTopModule[+L <: DigitalTop](l: L) extends ChipyardSystemModule(l) - with testchipip.CanHaveTraceIOModuleImp with sifive.blocks.devices.i2c.HasPeripheryI2CModuleImp with sifive.blocks.devices.pwm.HasPeripheryPWMModuleImp with sifive.blocks.devices.uart.HasPeripheryUARTModuleImp diff --git a/generators/chipyard/src/main/scala/SpikeTile.scala b/generators/chipyard/src/main/scala/SpikeTile.scala index fc822c22..97866c50 100644 --- a/generators/chipyard/src/main/scala/SpikeTile.scala +++ b/generators/chipyard/src/main/scala/SpikeTile.scala @@ -2,7 +2,7 @@ package chipyard import chisel3._ import chisel3.util._ -import chisel3.experimental.{IntParam, StringParam, IO} +import chisel3.experimental.{IntParam, StringParam} import org.chipsalliance.cde.config._ import freechips.rocketchip.subsystem._ @@ -77,14 +77,15 @@ case class SpikeTileAttachParams( } case class SpikeTileParams( - hartId: Int = 0, + tileId: Int = 0, val core: SpikeCoreParams = SpikeCoreParams(), icacheParams: ICacheParams = ICacheParams(nWays = 32), dcacheParams: DCacheParams = DCacheParams(nWays = 32), tcmParams: Option[MasterPortParams] = None // tightly coupled memory ) extends InstantiableTileParams[SpikeTile] { - val name = Some("spike_tile") + val baseName = "spike_tile" + val uniqueName = s"${baseName}_$tileId" val beuAddr = None val blockerCtrlAddr = None val btb = None @@ -92,7 +93,7 @@ case class SpikeTileParams( val dcache = Some(dcacheParams) val icache = Some(icacheParams) val clockSinkParams = ClockSinkParameters() - def instantiate(crossing: TileCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters): SpikeTile = { + def instantiate(crossing: HierarchicalElementCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters): SpikeTile = { new SpikeTile(this, crossing, lookup) } } @@ -106,11 +107,11 @@ class SpikeTile( with SourcesExternalNotifications { // Private constructor ensures altered LazyModule.p is used implicitly - def this(params: SpikeTileParams, crossing: TileCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters) = + def this(params: SpikeTileParams, crossing: HierarchicalElementCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters) = this(params, crossing.crossingType, lookup, p) // Required TileLink nodes - val intOutwardNode = IntIdentityNode() + val intOutwardNode = None val masterNode = visibilityNode val slaveNode = TLIdentityNode() @@ -129,21 +130,21 @@ class SpikeTile( } ResourceBinding { - Resource(cpuDevice, "reg").bind(ResourceAddress(hartId)) + Resource(cpuDevice, "reg").bind(ResourceAddress(tileId)) } val icacheNode = TLClientNode(Seq(TLMasterPortParameters.v1(Seq(TLMasterParameters.v1( sourceId = IdRange(0, 1), - name = s"Core ${staticIdForMetadataUseOnly} ICache"))))) + name = s"Core ${tileId} ICache"))))) val dcacheNode = TLClientNode(Seq(TLMasterPortParameters.v1(Seq(TLMasterParameters.v1( - name = s"Core ${staticIdForMetadataUseOnly} DCache", + name = s"Core ${tileId} DCache", sourceId = IdRange(0, tileParams.dcache.get.nMSHRs), supportsProbe = TransferSizes(p(CacheBlockBytes), p(CacheBlockBytes))))))) val mmioNode = TLClientNode((Seq(TLMasterPortParameters.v1(Seq(TLMasterParameters.v1( - name = s"Core ${staticIdForMetadataUseOnly} MMIO", + name = s"Core ${tileId} MMIO", sourceId = IdRange(0, 1), requestFifo = true)))))) @@ -313,7 +314,7 @@ class SpikeBlackBox( } class SpikeTileModuleImp(outer: SpikeTile) extends BaseTileModuleImp(outer) { - + val tileParams = outer.tileParams // We create a bundle here and decode the interrupt. val int_bundle = Wire(new TileInterrupts()) outer.decodeCoreInterrupts(int_bundle) @@ -337,7 +338,7 @@ class SpikeTileModuleImp(outer: SpikeTile) extends BaseTileModuleImp(outer) { // then the DTM-based bringup with SimDTM will be used. This isn't required to be // true, but it usually is val useDTM = p(ExportDebug).protocols.contains(DMI) - val spike = Module(new SpikeBlackBox(hartId, isaDTS, tileParams.core.nPMPs, + val spike = Module(new SpikeBlackBox(outer.tileId, outer.isaDTS, tileParams.core.nPMPs, tileParams.icache.get.nSets, tileParams.icache.get.nWays, tileParams.dcache.get.nSets, tileParams.dcache.get.nWays, tileParams.dcache.get.nMSHRs, @@ -467,19 +468,21 @@ class SpikeTileModuleImp(outer: SpikeTile) extends BaseTileModuleImp(outer) { } } -class WithNSpikeCores(n: Int = 1, tileParams: SpikeTileParams = SpikeTileParams(), - overrideIdOffset: Option[Int] = None) extends Config((site, here, up) => { +class WithNSpikeCores(n: Int = 1, tileParams: SpikeTileParams = SpikeTileParams() +) extends Config((site, here, up) => { case TilesLocated(InSubsystem) => { // Calculate the next available hart ID (since hart ID cannot be duplicated) val prev = up(TilesLocated(InSubsystem), site) - val idOffset = overrideIdOffset.getOrElse(prev.size) + val idOffset = up(NumTiles) // Create TileAttachParams for every core to be instantiated (0 until n).map { i => SpikeTileAttachParams( - tileParams = tileParams.copy(hartId = i + idOffset) + tileParams = tileParams.copy(tileId = i + idOffset) ) } ++ prev } + case NumTiles => up(NumTiles) + n + }) class WithSpikeTCM extends Config((site, here, up) => { @@ -492,5 +495,5 @@ class WithSpikeTCM extends Config((site, here, up) => { ))) } case ExtMem => None - case BankedL2Key => up(BankedL2Key).copy(nBanks = 0) + case SubsystemBankedCoherenceKey => up(SubsystemBankedCoherenceKey).copy(nBanks = 0) }) diff --git a/generators/chipyard/src/main/scala/Subsystem.scala b/generators/chipyard/src/main/scala/Subsystem.scala index d25d4fa3..993dad02 100644 --- a/generators/chipyard/src/main/scala/Subsystem.scala +++ b/generators/chipyard/src/main/scala/Subsystem.scala @@ -24,12 +24,12 @@ import freechips.rocketchip.amba.axi4._ import boom.common.{BoomTile} -import testchipip.{CanHavePeripheryTLSerial, SerialTLKey} +import testchipip.serdes.{CanHavePeripheryTLSerial, SerialTLKey} trait CanHaveHTIF { this: BaseSubsystem => // Advertise HTIF if system can communicate with fesvr if (this match { - case _: CanHavePeripheryTLSerial if p(SerialTLKey).nonEmpty => true + case _: CanHavePeripheryTLSerial if (p(SerialTLKey).size != 0) => true case _: HasPeripheryDebug if (!p(DebugModuleKey).isEmpty && p(ExportDebug).dmi) => true case _ => false }) { @@ -71,18 +71,24 @@ trait CanHaveChosenInDTS { this: BaseSubsystem => } class ChipyardSubsystem(implicit p: Parameters) extends BaseSubsystem - with HasTiles - with HasPeripheryDebug - with CanHaveHTIF - with CanHaveChosenInDTS + with InstantiatesHierarchicalElements + with HasTileNotificationSinks + with HasTileInputConstants + with CanHavePeripheryCLINT + with CanHavePeripheryPLIC + with HasPeripheryDebug + with HasHierarchicalElementsRootContext + with HasHierarchicalElements + with CanHaveHTIF + with CanHaveChosenInDTS { - def coreMonitorBundles = tiles.map { + def coreMonitorBundles = totalTiles.values.map { case r: RocketTile => r.module.core.rocketImpl.coreMonitorBundle case b: BoomTile => b.module.core.coreMonitorBundle }.toList // No-tile configs have to be handled specially. - if (tiles.size == 0) { + if (totalTiles.size == 0) { // no PLIC, so sink interrupts to nowhere require(!p(PLICKey).isDefined) val intNexus = IntNexusNode(sourceFn = x => x.head, sinkFn = x => x.head) @@ -90,16 +96,12 @@ class ChipyardSubsystem(implicit p: Parameters) extends BaseSubsystem intSink := intNexus :=* ibus.toPLIC // avoids a bug when there are no interrupt sources - ibus.fromAsync := NullIntSource() + ibus { ibus.fromAsync := NullIntSource() } // Need to have at least 1 driver to the tile notification sinks tileHaltXbarNode := IntSourceNode(IntSourcePortSimple()) tileWFIXbarNode := IntSourceNode(IntSourcePortSimple()) tileCeaseXbarNode := IntSourceNode(IntSourcePortSimple()) - - // Sink reset vectors to nowhere - val resetVectorSink = BundleBridgeSink[UInt](Some(() => UInt(28.W))) - resetVectorSink := tileResetVectorNode } // Relying on [[TLBusWrapperConnection]].driveClockFromMaster for @@ -107,7 +109,7 @@ class ChipyardSubsystem(implicit p: Parameters) extends BaseSubsystem // ClockGroup. This makes it impossible to determine which clocks are driven // by which bus based on the member names, which is problematic when there is // a rational crossing between two buses. Instead, provide all bus clocks - // directly from the asyncClockGroupsNode in the subsystem to ensure bus + // directly from the allClockGroupsNode in the subsystem to ensure bus // names are always preserved in the top-level clock names. // // For example, using a RationalCrossing between the Sbus and Cbus, and @@ -116,12 +118,12 @@ class ChipyardSubsystem(implicit p: Parameters) extends BaseSubsystem // Conversly, if an async crossing is used, they instead receive names of the // form "subsystem_cbus_[0-9]*". The assignment below provides the latter names in all cases. Seq(PBUS, FBUS, MBUS, CBUS).foreach { loc => - tlBusWrapperLocationMap.lift(loc).foreach { _.clockGroupNode := asyncClockGroupsNode } + tlBusWrapperLocationMap.lift(loc).foreach { _.clockGroupNode := allClockGroupsNode } } override lazy val module = new ChipyardSubsystemModuleImp(this) } class ChipyardSubsystemModuleImp[+L <: ChipyardSubsystem](_outer: L) extends BaseSubsystemModuleImp(_outer) - with HasTilesModuleImp + with HasHierarchicalElementsRootContextModuleImp { } diff --git a/generators/chipyard/src/main/scala/System.scala b/generators/chipyard/src/main/scala/System.scala index 5643e380..b8a04eac 100644 --- a/generators/chipyard/src/main/scala/System.scala +++ b/generators/chipyard/src/main/scala/System.scala @@ -32,13 +32,6 @@ class ChipyardSystem(implicit p: Parameters) extends ChipyardSubsystem val bootROM = p(BootROMLocated(location)).map { BootROM.attach(_, this, CBUS) } val maskROMs = p(MaskROMLocated(location)).map { MaskROM.attach(_, this, CBUS) } - // If there is no bootrom, the tile reset vector bundle will be tied to zero - if (bootROM.isEmpty) { - val fakeResetVectorSourceNode = BundleBridgeSource[UInt]() - InModuleBody { fakeResetVectorSourceNode.bundle := 0.U } - tileResetVectorNexusNode := fakeResetVectorSourceNode - } - override lazy val module = new ChipyardSystemModule(this) } diff --git a/generators/chipyard/src/main/scala/TestSuites.scala b/generators/chipyard/src/main/scala/TestSuites.scala index 0e4e3310..2a88ebb2 100644 --- a/generators/chipyard/src/main/scala/TestSuites.scala +++ b/generators/chipyard/src/main/scala/TestSuites.scala @@ -65,7 +65,7 @@ class TestSuiteHelper */ def addGenericTestSuites(tiles: Seq[TileParams])(implicit p: Parameters) = { val xlen = p(XLen) - tiles.find(_.hartId == 0).map { tileParams => + tiles.find(_.tileId == 0).map { tileParams => val coreParams = tileParams.core val vm = coreParams.useVM val env = if (vm) List("p","v") else List("p") diff --git a/generators/chipyard/src/main/scala/clocking/CanHaveClockTap.scala b/generators/chipyard/src/main/scala/clocking/CanHaveClockTap.scala new file mode 100644 index 00000000..9af30ddf --- /dev/null +++ b/generators/chipyard/src/main/scala/clocking/CanHaveClockTap.scala @@ -0,0 +1,27 @@ +package chipyard.clocking + +import chisel3._ + +import org.chipsalliance.cde.config.{Parameters, Field, Config} +import freechips.rocketchip.diplomacy._ +import freechips.rocketchip.tilelink._ +import freechips.rocketchip.subsystem._ +import freechips.rocketchip.util._ +import freechips.rocketchip.tile._ +import freechips.rocketchip.prci._ + +case object ClockTapKey extends Field[Boolean](true) + +trait CanHaveClockTap { this: BaseSubsystem => + require(!p(SubsystemDriveClockGroupsFromIO), "Subsystem must not drive clocks from IO") + val clockTapNode = Option.when(p(ClockTapKey)) { + val clockTap = ClockSinkNode(Seq(ClockSinkParameters(name=Some("clock_tap")))) + clockTap := ClockGroup() := allClockGroupsNode + clockTap + } + val clockTapIO = clockTapNode.map { node => InModuleBody { + val clock_tap = IO(Output(Clock())) + clock_tap := node.in.head._1.clock + clock_tap + }} +} diff --git a/generators/chipyard/src/main/scala/clocking/ClockBinders.scala b/generators/chipyard/src/main/scala/clocking/ClockBinders.scala index 412dd43d..fdb2ec9e 100644 --- a/generators/chipyard/src/main/scala/clocking/ClockBinders.scala +++ b/generators/chipyard/src/main/scala/clocking/ClockBinders.scala @@ -2,47 +2,36 @@ package chipyard.clocking import chisel3._ import chisel3.util._ -import chipyard.iobinders.{OverrideLazyIOBinder, GetSystemParameters, IOCellKey} +import chipyard.iobinders._ import freechips.rocketchip.prci._ import freechips.rocketchip.diplomacy._ import freechips.rocketchip.subsystem._ import freechips.rocketchip.tilelink._ import barstools.iocell.chisel._ -class ClockWithFreq(val freqMHz: Double) extends Bundle { - val clock = Clock() -} - // This uses the FakePLL, which uses a ClockAtFreq Verilog blackbox to generate // the requested clocks. This also adds TileLink ClockDivider and ClockSelector // blocks, which allow memory-mapped control of clock division, and clock muxing // between the FakePLL and the slow off-chip clock // Note: This will not simulate properly with firesim -class WithPLLSelectorDividerClockGenerator extends OverrideLazyIOBinder({ +// Unsetting enable will prevent the divider/selector from actually modifying the clock, +// while preserving the address map. Unsetting enable should only be done for RTL +// simulators (Verilator) which do not model reset properly +class WithPLLSelectorDividerClockGenerator(enable: Boolean = true) extends OverrideLazyIOBinder({ (system: HasChipyardPRCI) => { // Connect the implicit clock implicit val p = GetSystemParameters(system) - val implicitClockSinkNode = ClockSinkNode(Seq(ClockSinkParameters(name = Some("implicit_clock")))) - system.connectImplicitClockSinkNode(implicitClockSinkNode) - InModuleBody { - val implicit_clock = implicitClockSinkNode.in.head._1.clock - val implicit_reset = implicitClockSinkNode.in.head._1.reset - system.asInstanceOf[BaseSubsystem].module match { case l: LazyModuleImp => { - l.clock := implicit_clock - l.reset := implicit_reset - }} - } val tlbus = system.asInstanceOf[BaseSubsystem].locateTLBusWrapper(system.prciParams.slaveWhere) val baseAddress = system.prciParams.baseAddress - val clockDivider = system.prci_ctrl_domain { LazyModule(new TLClockDivider (baseAddress + 0x20000, tlbus.beatBytes)) } - val clockSelector = system.prci_ctrl_domain { LazyModule(new TLClockSelector(baseAddress + 0x30000, tlbus.beatBytes)) } + val clockDivider = system.prci_ctrl_domain { LazyModule(new TLClockDivider (baseAddress + 0x20000, tlbus.beatBytes, enable=enable)) } + val clockSelector = system.prci_ctrl_domain { LazyModule(new TLClockSelector(baseAddress + 0x30000, tlbus.beatBytes, enable=enable)) } val pllCtrl = system.prci_ctrl_domain { LazyModule(new FakePLLCtrl (baseAddress + 0x40000, tlbus.beatBytes)) } clockDivider.tlNode := system.prci_ctrl_domain { TLFragmenter(tlbus.beatBytes, tlbus.blockBytes) := system.prci_ctrl_bus.get } clockSelector.tlNode := system.prci_ctrl_domain { TLFragmenter(tlbus.beatBytes, tlbus.blockBytes) := system.prci_ctrl_bus.get } pllCtrl.tlNode := system.prci_ctrl_domain { TLFragmenter(tlbus.beatBytes, tlbus.blockBytes) := system.prci_ctrl_bus.get } - system.allClockGroupsNode := clockDivider.clockNode := clockSelector.clockNode + system.chiptopClockGroupsNode := clockDivider.clockNode := clockSelector.clockNode // Connect all other requested clocks val slowClockSource = ClockSourceNode(Seq(ClockSourceParameters())) @@ -58,13 +47,13 @@ class WithPLLSelectorDividerClockGenerator extends OverrideLazyIOBinder({ pllCtrlSink := pllCtrl.ctrlNode InModuleBody { - val clock_wire = Wire(Input(new ClockWithFreq(100))) + val clock_wire = Wire(Input(Clock())) val reset_wire = Wire(Input(AsyncReset())) val (clock_io, clockIOCell) = IOCell.generateIOFromSignal(clock_wire, "clock", p(IOCellKey)) val (reset_io, resetIOCell) = IOCell.generateIOFromSignal(reset_wire, "reset", p(IOCellKey)) slowClockSource.out.unzip._1.map { o => - o.clock := clock_wire.clock + o.clock := clock_wire o.reset := reset_wire } @@ -79,31 +68,20 @@ class WithPLLSelectorDividerClockGenerator extends OverrideLazyIOBinder({ o.reset := reset_wire } - (Seq(clock_io, reset_io), clockIOCell ++ resetIOCell) + (Seq(ClockPort(() => clock_io, 100), ResetPort(() => reset_io)), clockIOCell ++ resetIOCell) } } }) - + // This passes all clocks through to the TestHarness class WithPassthroughClockGenerator extends OverrideLazyIOBinder({ (system: HasChipyardPRCI) => { - // Connect the implicit clock implicit val p = GetSystemParameters(system) - val implicitClockSinkNode = ClockSinkNode(Seq(ClockSinkParameters(name = Some("implicit_clock")))) - system.connectImplicitClockSinkNode(implicitClockSinkNode) - InModuleBody { - val implicit_clock = implicitClockSinkNode.in.head._1.clock - val implicit_reset = implicitClockSinkNode.in.head._1.reset - system.asInstanceOf[BaseSubsystem].module match { case l: LazyModuleImp => { - l.clock := implicit_clock - l.reset := implicit_reset - }} - } // This aggregate node should do nothing val clockGroupAggNode = ClockGroupAggregateNode("fake") val clockGroupsSourceNode = ClockGroupSourceNode(Seq(ClockGroupSourceParameters())) - system.allClockGroupsNode := clockGroupAggNode := clockGroupsSourceNode + system.chiptopClockGroupsNode := clockGroupAggNode := clockGroupsSourceNode InModuleBody { val reset_io = IO(Input(AsyncReset())) @@ -114,12 +92,21 @@ class WithPassthroughClockGenerator extends OverrideLazyIOBinder({ require(m.take.isDefined, s"""Clock ${m.name.get} has no requested frequency |Clocks: ${edge.sink.members.map(_.name.get)}""".stripMargin) val freq = m.take.get.freqMHz - val clock_io = IO(Input(new ClockWithFreq(freq))).suggestName(s"clock_${m.name.get}") - b.clock := clock_io.clock + val clock_io = IO(Input(Clock())).suggestName(s"clock_${m.name.get}") + b.clock := clock_io b.reset := reset_io - clock_io + ClockPort(() => clock_io, freq) }.toSeq - ((clock_ios :+ reset_io), Nil) + ((clock_ios :+ ResetPort(() => reset_io)), Nil) } } }) + +class WithClockTapIOCells extends OverrideIOBinder({ + (system: CanHaveClockTap) => { + system.clockTapIO.map { tap => + val (clock_tap_io, clock_tap_cell) = IOCell.generateIOFromSignal(tap.getWrappedValue, "clock_tap") + (Seq(ClockTapPort(() => clock_tap_io)), clock_tap_cell) + }.getOrElse((Nil, Nil)) + } +}) diff --git a/generators/chipyard/src/main/scala/clocking/ClockGroupCombiner.scala b/generators/chipyard/src/main/scala/clocking/ClockGroupCombiner.scala index e5236804..9b53cbef 100644 --- a/generators/chipyard/src/main/scala/clocking/ClockGroupCombiner.scala +++ b/generators/chipyard/src/main/scala/clocking/ClockGroupCombiner.scala @@ -2,7 +2,7 @@ package chipyard.clocking import chisel3._ import chisel3.util._ -import chisel3.experimental.{Analog, IO} +import chisel3.experimental.Analog import org.chipsalliance.cde.config._ import freechips.rocketchip.subsystem._ diff --git a/generators/chipyard/src/main/scala/clocking/DividerOnlyClockGenerator.scala b/generators/chipyard/src/main/scala/clocking/DividerOnlyClockGenerator.scala index e52ec674..42c45db6 100644 --- a/generators/chipyard/src/main/scala/clocking/DividerOnlyClockGenerator.scala +++ b/generators/chipyard/src/main/scala/clocking/DividerOnlyClockGenerator.scala @@ -51,7 +51,7 @@ object FrequencyUtils { require(!requestedOutputs.contains(0.0)) val requestedFreqs = requestedOutputs.map(_.freqMHz) val fastestFreq = requestedFreqs.max - require(fastestFreq <= maximumAllowableFreqMHz) + require(fastestFreq <= maximumAllowableFreqMHz, s"Fastest Freq $fastestFreq > Max Freq $maximumAllowableFreqMHz") val candidateFreqs = Seq.tabulate(Math.ceil(maximumAllowableFreqMHz / fastestFreq).toInt)(i => (i + 1) * fastestFreq) diff --git a/generators/chipyard/src/main/scala/clocking/HasChipyardPRCI.scala b/generators/chipyard/src/main/scala/clocking/HasChipyardPRCI.scala index 356a0432..9b140e20 100644 --- a/generators/chipyard/src/main/scala/clocking/HasChipyardPRCI.scala +++ b/generators/chipyard/src/main/scala/clocking/HasChipyardPRCI.scala @@ -14,7 +14,8 @@ import freechips.rocketchip.util._ import freechips.rocketchip.tile._ import freechips.rocketchip.prci._ -import testchipip.{TLTileResetCtrl, ClockGroupFakeResetSynchronizer} +import testchipip.boot.{TLTileResetCtrl} +import testchipip.clocking.{ClockGroupFakeResetSynchronizer} case class ChipyardPRCIControlParams( slaveWhere: TLBusWrapperLocation = CBUS, @@ -29,15 +30,14 @@ case class ChipyardPRCIControlParams( case object ChipyardPRCIControlKey extends Field[ChipyardPRCIControlParams](ChipyardPRCIControlParams()) -trait HasChipyardPRCI { this: BaseSubsystem with InstantiatesTiles => - require(p(SubsystemDriveAsyncClockGroupsKey).isEmpty, "Subsystem asyncClockGroups must be undriven") +trait HasChipyardPRCI { this: BaseSubsystem with InstantiatesHierarchicalElements => + require(!p(SubsystemDriveClockGroupsFromIO), "Subsystem allClockGroups cannot be driven from implicit clocks") val prciParams = p(ChipyardPRCIControlKey) // Set up clock domain private val tlbus = locateTLBusWrapper(prciParams.slaveWhere) - val prci_ctrl_domain = LazyModule(new ClockSinkDomain(name=Some("chipyard-prci-control"))) - prci_ctrl_domain.clockNode := tlbus.fixedClockNode + val prci_ctrl_domain = tlbus.generateSynchronousDomain.suggestName("chipyard_prcictrl_domain") val prci_ctrl_bus = Option.when(prciParams.generatePRCIXBar) { prci_ctrl_domain { TLXbar() } } prci_ctrl_bus.foreach(xbar => tlbus.coupleTo("prci_ctrl") { (xbar @@ -48,29 +48,13 @@ trait HasChipyardPRCI { this: BaseSubsystem with InstantiatesTiles => // Aggregate all the clock groups into a single node val aggregator = LazyModule(new ClockGroupAggregator("allClocks")).node - val allClockGroupsNode = ClockGroupEphemeralNode() - // There are two "sets" of clocks which must be dealt with - - // 1. The implicit clock from the subsystem. RC is moving away from depending on this - // clock, but some modules still use it. Since the implicit clock sink node - // is created in the ChipTop (the hierarchy wrapping the subsystem), this function - // is provided to allow connecting that clock to the clock aggregator. This function - // should be called in the ChipTop context - def connectImplicitClockSinkNode(sink: ClockSinkNode) = { - val implicitClockGrouper = this { ClockGroup() } - (sink - := implicitClockGrouper - := aggregator) - } - - // 2. The rest of the diplomatic clocks in the subsystem are routed to this asyncClockGroupsNode + // The diplomatic clocks in the subsystem are routed to this allClockGroupsNode val clockNamePrefixer = ClockGroupNamePrefixer() - (asyncClockGroupsNode + (allClockGroupsNode :*= clockNamePrefixer :*= aggregator) - // Once all the clocks are gathered in the aggregator node, several steps remain // 1. Assign frequencies to any clock groups which did not specify a frequency. // 2. Combine duplicated clock groups (clock groups which physically should be in the same clock domain) @@ -91,7 +75,7 @@ trait HasChipyardPRCI { this: BaseSubsystem with InstantiatesTiles => } } val tileResetSetter = Option.when(prciParams.enableTileResetSetting) { prci_ctrl_domain { val reset_setter = LazyModule(new TileResetSetter(prciParams.baseAddress + 0x10000, tlbus.beatBytes, - tile_prci_domains.map(_.tile_reset_domain.clockNode.portParams(0).name.get), Nil)) + tile_prci_domains.map(_._2.tile_reset_domain.clockNode.portParams(0).name.get).toSeq, Nil)) reset_setter.tlNode := TLFragmenter(tlbus.beatBytes, tlbus.blockBytes) := prci_ctrl_bus.get reset_setter } } @@ -115,11 +99,14 @@ RTL SIMULATORS, NAMELY VERILATOR. """ + Console.RESET) } + // The chiptopClockGroupsNode shouuld be what ClockBinders attach to + val chiptopClockGroupsNode = ClockGroupEphemeralNode() + (aggregator := frequencySpecifier := clockGroupCombiner := resetSynchronizer := tileClockGater.map(_.clockNode).getOrElse(ClockGroupEphemeralNode()(ValName("temp"))) := tileResetSetter.map(_.clockNode).getOrElse(ClockGroupEphemeralNode()(ValName("temp"))) - := allClockGroupsNode) + := chiptopClockGroupsNode) } diff --git a/generators/chipyard/src/main/scala/clocking/TLClockDivider.scala b/generators/chipyard/src/main/scala/clocking/TLClockDivider.scala index 45f9374d..958c9194 100644 --- a/generators/chipyard/src/main/scala/clocking/TLClockDivider.scala +++ b/generators/chipyard/src/main/scala/clocking/TLClockDivider.scala @@ -11,15 +11,31 @@ import freechips.rocketchip.util._ import freechips.rocketchip.prci._ import freechips.rocketchip.util.ElaborationArtefacts -import testchipip._ +import testchipip.clocking._ // This module adds a TileLink memory-mapped clock divider to the clock graph // The output clock/reset pairs from this module should be synchronized later -class TLClockDivider(address: BigInt, beatBytes: Int, divBits: Int = 8)(implicit p: Parameters) extends LazyModule { +// If enable is unset, this will not divide the clock +// DO NOT unset enable for VLSI, or prototyping flows. The disable feature is a work around for +// some RTL simulators which do not simulate the reset synchronization properly +class TLClockDivider(address: BigInt, beatBytes: Int, divBits: Int = 8, enable: Boolean = true)(implicit p: Parameters) extends LazyModule { val device = new SimpleDevice(s"clk-div-ctrl", Nil) val clockNode = ClockGroupIdentityNode() val tlNode = TLRegisterNode(Seq(AddressSet(address, 4096-1)), device, "reg/control", beatBytes=beatBytes) + if (!enable) println(Console.RED + s""" + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +WARNING: + +YOU ARE USING THE TLCLOCKDIVIDER IN +"DISABLED" MODE. THIS SHOULD ONLY BE DONE +FOR RTL SIMULATION + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +""" + Console.RESET) + lazy val module = new LazyModuleImp(this) { require (clockNode.out.size == 1) val sources = clockNode.in.head._1.member.data.toSeq @@ -38,20 +54,28 @@ class TLClockDivider(address: BigInt, beatBytes: Int, divBits: Int = 8)(implicit val reg = Module(new AsyncResetRegVec(w=divBits, init=0)) println(s"${(address+i*4).toString(16)}: Clock domain $sinkName divider") - val divider = Module(new testchipip.ClockDivideOrPass(divBits, depth = 3, genClockGate = p(ClockGateImpl))) + val divider = Module(new ClockDivideOrPass(divBits, depth = 3, genClockGate = p(ClockGateImpl))) divider.io.clockIn := sources(i).clock // busReset is expected to be high for a long time, since reset will take a while to propagate // to the TL bus. While reset is propagating, make sure we propagate a fast, undivided clock // by setting divisor=0. The divisor signal into the ClockDividerOrPass is synchronized internally divider.io.divisor := Mux(busReset.asBool, 0.U, reg.io.q) divider.io.resetAsync := ResetStretcher(sources(i).clock, asyncReset, 20).asAsyncReset - sinks(i)._2.clock := divider.io.clockOut - // Note this is not synchronized to the output clock, which takes time to appear - // so this is still asyncreset - // Stretch the reset for 40 cycles, to give enough time to reset any downstream - // digital logic - sinks(i)._2.reset := ResetStretcher(sources(i).clock, asyncReset, 40).asAsyncReset + if (enable) { + sinks(i)._2.clock := divider.io.clockOut + + // Note this is not synchronized to the output clock, which takes time to appear + // so this is still asyncreset + // Stretch the reset for 40 cycles, to give enough time to reset any downstream + // digital logic + sinks(i)._2.reset := ResetStretcher(sources(i).clock, asyncReset, 40).asAsyncReset + } else { + // WARNING: THIS IS FOR RTL SIMULATION ONLY + sinks(i)._2.clock := sources(i).clock + sinks(i)._2.reset := sources(i).reset + } + reg } diff --git a/generators/chipyard/src/main/scala/clocking/TLClockSelector.scala b/generators/chipyard/src/main/scala/clocking/TLClockSelector.scala index 27870428..8c6371f1 100644 --- a/generators/chipyard/src/main/scala/clocking/TLClockSelector.scala +++ b/generators/chipyard/src/main/scala/clocking/TLClockSelector.scala @@ -11,7 +11,7 @@ import freechips.rocketchip.util._ import freechips.rocketchip.prci._ import freechips.rocketchip.util.ElaborationArtefacts -import testchipip._ +import testchipip.clocking._ case class ClockSelNode()(implicit valName: ValName) extends MixedNexusNode(ClockImp, ClockGroupImp)( @@ -21,12 +21,30 @@ case class ClockSelNode()(implicit valName: ValName) // This module adds a TileLink memory-mapped clock mux for each downstream clock domain // in the clock graph. The output clock/reset should be synchronized downstream -class TLClockSelector(address: BigInt, beatBytes: Int)(implicit p: Parameters) extends LazyModule { +// If enable is unset, this will always pass through the 0'th clock +// DO NOT unset enable for VLSI, or prototyping flows. The disable feature is a work around for +// some RTL simulators which do not simulate the reset synchronization properly +class TLClockSelector(address: BigInt, beatBytes: Int, enable: Boolean = true)(implicit p: Parameters) extends LazyModule { val device = new SimpleDevice("clk-sel-ctrl", Nil) val tlNode = TLRegisterNode(Seq(AddressSet(address, 4096-1)), device, "reg/control", beatBytes=beatBytes) val clockNode = ClockSelNode() + if (!enable) println(Console.RED + s""" + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +WARNING: + +YOU ARE USING THE TLCLOCKSELECTOR IN +"DISABLED" MODE. THIS SHOULD ONLY BE DONE +FOR RTL SIMULATION + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +""" + Console.RESET) + + + lazy val module = new LazyModuleImp(this) { val asyncReset = clockNode.in.map(_._1).map(_.reset).toSeq(0) val clocks = clockNode.in.map(_._1).map(_.clock) @@ -40,13 +58,18 @@ class TLClockSelector(address: BigInt, beatBytes: Int)(implicit p: Parameters) e sel := reg.io.q println(s"${(address+i*4).toString(16)}: Clock domain $sinkName clock mux") - val mux = testchipip.ClockMutexMux(clocks).suggestName(s"${sinkName}_clkmux") + val mux = ClockMutexMux(clocks).suggestName(s"${sinkName}_clkmux") mux.io.sel := sel mux.io.resetAsync := asyncReset.asAsyncReset - sinks(i).clock := mux.io.clockOut - // Stretch the reset for 20 cycles, to give time to reset any downstream digital logic - sinks(i).reset := ResetStretcher(clocks(0), asyncReset, 20).asAsyncReset - + if (enable) { + sinks(i).clock := mux.io.clockOut + // Stretch the reset for 20 cycles, to give time to reset any downstream digital logic + sinks(i).reset := ResetStretcher(clocks(0), asyncReset, 20).asAsyncReset + } else { + // WARNING: THIS IS FOR RTL SIMULATION ONLY + sinks(i).clock := clocks(0) + sinks(i).reset := asyncReset + } reg } tlNode.regmap((0 until sinks.size).map { i => diff --git a/generators/chipyard/src/main/scala/clocking/TileClockGater.scala b/generators/chipyard/src/main/scala/clocking/TileClockGater.scala index e299d0a9..c92e05bc 100644 --- a/generators/chipyard/src/main/scala/clocking/TileClockGater.scala +++ b/generators/chipyard/src/main/scala/clocking/TileClockGater.scala @@ -2,7 +2,7 @@ package chipyard.clocking import chisel3._ import chisel3.util._ -import chisel3.experimental.{Analog, IO} +import chisel3.experimental.Analog import org.chipsalliance.cde.config._ import freechips.rocketchip.subsystem._ diff --git a/generators/chipyard/src/main/scala/clocking/TileResetSetter.scala b/generators/chipyard/src/main/scala/clocking/TileResetSetter.scala index 53dd36d0..88916d17 100644 --- a/generators/chipyard/src/main/scala/clocking/TileResetSetter.scala +++ b/generators/chipyard/src/main/scala/clocking/TileResetSetter.scala @@ -2,7 +2,7 @@ package chipyard.clocking import chisel3._ import chisel3.util._ -import chisel3.experimental.{Analog, IO} +import chisel3.experimental.Analog import org.chipsalliance.cde.config._ import freechips.rocketchip.subsystem._ diff --git a/generators/chipyard/src/main/scala/config/AbstractConfig.scala b/generators/chipyard/src/main/scala/config/AbstractConfig.scala index 44235cbd..8a328daf 100644 --- a/generators/chipyard/src/main/scala/config/AbstractConfig.scala +++ b/generators/chipyard/src/main/scala/config/AbstractConfig.scala @@ -15,15 +15,18 @@ class AbstractConfig extends Config( new chipyard.harness.WithUARTAdapter ++ // add UART adapter to display UART on stdout, if uart is present new chipyard.harness.WithBlackBoxSimMem ++ // add SimDRAM DRAM model for axi4 backing memory, if axi4 mem is enabled new chipyard.harness.WithSimTSIOverSerialTL ++ // add external serial-adapter and RAM - new chipyard.harness.WithSimDebug ++ // add SimJTAG or SimDTM adapters if debug module is enabled + new chipyard.harness.WithSimJTAGDebug ++ // add SimJTAG if JTAG for debug exposed + new chipyard.harness.WithSimDMI ++ // add SimJTAG if DMI exposed new chipyard.harness.WithGPIOTiedOff ++ // tie-off chiptop GPIOs, if GPIOs are present new chipyard.harness.WithSimSPIFlashModel ++ // add simulated SPI flash memory, if SPI is enabled new chipyard.harness.WithSimAXIMMIO ++ // add SimAXIMem for axi4 mmio port, if enabled new chipyard.harness.WithTieOffInterrupts ++ // tie-off interrupt ports, if present new chipyard.harness.WithTieOffL2FBusAXI ++ // tie-off external AXI4 master, if present new chipyard.harness.WithCustomBootPinPlusArg ++ // drive custom-boot pin with a plusarg, if custom-boot-pin is present + new chipyard.harness.WithDriveChipIdPin ++ // drive chip id pin from harness binder, if chip id pin is present new chipyard.harness.WithSimUARTToUARTTSI ++ // connect a SimUART to the UART-TSI port - new chipyard.harness.WithClockAndResetFromHarness ++ // all Clock/Reset I/O in ChipTop should be driven by harnessClockInstantiator + new chipyard.harness.WithClockFromHarness ++ // all Clock I/O in ChipTop should be driven by harnessClockInstantiator + new chipyard.harness.WithResetFromHarness ++ // reset controlled by harness new chipyard.harness.WithAbsoluteFreqHarnessClockInstantiator ++ // generate clocks in harness with unsynthesizable ClockSourceAtFreqMHz // The IOBinders instantiate ChipTop IOs to match desired digital IOs @@ -32,11 +35,14 @@ class AbstractConfig extends Config( new chipyard.iobinders.WithDebugIOCells ++ new chipyard.iobinders.WithUARTIOCells ++ new chipyard.iobinders.WithGPIOCells ++ - new chipyard.iobinders.WithSPIIOCells ++ + new chipyard.iobinders.WithSPIFlashIOCells ++ new chipyard.iobinders.WithExtInterruptIOCells ++ + new chipyard.iobinders.WithChipIdIOCells ++ new chipyard.iobinders.WithCustomBootPin ++ // The "punchthrough" IOBInders below don't generate IOCells, as these interfaces shouldn't really be mapped to ASIC IO // Instead, they directly pass through the DigitalTop ports to ports in the ChipTop + new chipyard.iobinders.WithI2CPunchthrough ++ + new chipyard.iobinders.WithSPIIOPunchthrough ++ new chipyard.iobinders.WithAXI4MemPunchthrough ++ new chipyard.iobinders.WithAXI4MMIOPunchthrough ++ new chipyard.iobinders.WithTLMemPunchthrough ++ @@ -47,22 +53,33 @@ class AbstractConfig extends Config( new chipyard.iobinders.WithUARTTSIPunchthrough ++ new chipyard.iobinders.WithNMITiedOff ++ - // By default, punch out IOs to the Harness - new chipyard.clocking.WithPassthroughClockGenerator ++ - new chipyard.clocking.WithClockGroupsCombinedByName(("uncore", Seq("sbus", "mbus", "pbus", "fbus", "cbus", "implicit"), Seq("tile"))) ++ + new chipyard.clocking.WithClockTapIOCells ++ // Default generate a clock tapio + new chipyard.clocking.WithPassthroughClockGenerator ++ // Default punch out IOs to the Harness + new chipyard.clocking.WithClockGroupsCombinedByName(("uncore", // Default merge all the bus clocks + Seq("sbus", "mbus", "pbus", "fbus", "cbus", "obus", "implicit", "clock_tap"), Seq("tile"))) ++ new chipyard.config.WithPeripheryBusFrequency(500.0) ++ // Default 500 MHz pbus + new chipyard.config.WithControlBusFrequency(500.0) ++ // Default 500 MHz cbus new chipyard.config.WithMemoryBusFrequency(500.0) ++ // Default 500 MHz mbus + new chipyard.config.WithControlBusFrequency(500.0) ++ // Default 500 MHz cbus + new chipyard.config.WithSystemBusFrequency(500.0) ++ // Default 500 MHz sbus + new chipyard.config.WithFrontBusFrequency(500.0) ++ // Default 500 MHz fbus + new chipyard.config.WithOffchipBusFrequency(500.0) ++ // Default 500 MHz obus - new testchipip.WithCustomBootPin ++ // add a custom-boot-pin to support pin-driven boot address - new testchipip.WithBootAddrReg ++ // add a boot-addr-reg for configurable boot address - new testchipip.WithSerialTLClientIdBits(4) ++ // support up to 1 << 4 simultaneous requests from serialTL port - new testchipip.WithSerialTLWidth(32) ++ // fatten the serialTL interface to improve testing performance - new testchipip.WithDefaultSerialTL ++ // use serialized tilelink port to external serialadapter/harnessRAM + new testchipip.boot.WithCustomBootPin ++ // add a custom-boot-pin to support pin-driven boot address + new testchipip.boot.WithBootAddrReg ++ // add a boot-addr-reg for configurable boot address + new testchipip.serdes.WithSerialTL(Seq( // add a serial-tilelink interface + testchipip.serdes.SerialTLParams( + client = Some(testchipip.serdes.SerialTLClientParams()), // serial-tilelink interface will master the FBUS, and support 4 idBits + phyParams = testchipip.serdes.ExternalSyncSerialParams(width=32) // serial-tilelink interface with 32 lanes + ) + )) ++ + new testchipip.soc.WithMbusScratchpad(base = 0x08000000, // add 64 KiB on-chip scratchpad + size = 64 * 1024) ++ new chipyard.config.WithDebugModuleAbstractDataWords(8) ++ // increase debug module data capacity new chipyard.config.WithBootROM ++ // use default bootrom new chipyard.config.WithUART ++ // add a UART new chipyard.config.WithL2TLBs(1024) ++ // use L2 TLBs - new chipyard.config.WithNoSubsystemDrivenClocks ++ // drive the subsystem diplomatic clocks from ChipTop instead of using implicit clocks + new chipyard.config.WithNoSubsystemClockIO ++ // drive the subsystem diplomatic clocks from ChipTop instead of using implicit clocks new chipyard.config.WithInheritBusFrequencyAssignments ++ // Unspecified clocks within a bus will receive the bus frequency if set new freechips.rocketchip.subsystem.WithNMemoryChannels(1) ++ // Default 1 memory channels new freechips.rocketchip.subsystem.WithClockGateModel ++ // add default EICG_wrapper clock gate model diff --git a/generators/chipyard/src/main/scala/config/ChipConfigs.scala b/generators/chipyard/src/main/scala/config/ChipConfigs.scala index cc61794c..52f39a03 100644 --- a/generators/chipyard/src/main/scala/config/ChipConfigs.scala +++ b/generators/chipyard/src/main/scala/config/ChipConfigs.scala @@ -3,7 +3,7 @@ package chipyard import org.chipsalliance.cde.config.{Config} import freechips.rocketchip.diplomacy._ import freechips.rocketchip.subsystem.{MBUS, SBUS} -import testchipip.{OBUS} +import testchipip.soc.{OBUS} // A simple config demonstrating how to set up a basic chip in Chipyard class ChipLikeRocketConfig extends Config( @@ -22,16 +22,26 @@ class ChipLikeRocketConfig extends Config( //================================== // Set up I/O //================================== - new testchipip.WithSerialTLWidth(4) ++ // 4bit wide Serialized TL interface to minimize IO - new testchipip.WithSerialTLBackingMemory ++ // Configure the off-chip memory accessible over serial-tl as backing memory - new freechips.rocketchip.subsystem.WithExtMemSize((1 << 30) * 4L) ++ // 4GB max external memory + new testchipip.serdes.WithSerialTL(Seq(testchipip.serdes.SerialTLParams( // 1 serial tilelink port + manager = Some(testchipip.serdes.SerialTLManagerParams( // port acts as a manager of offchip memory + memParams = Seq(testchipip.serdes.ManagerRAMParams( // 4 GB of off-chip memory + address = BigInt("80000000", 16), + size = BigInt("100000000", 16) + )), + isMemoryDevice = true + )), + client = Some(testchipip.serdes.SerialTLClientParams()), // Allow an external manager to probe this chip + phyParams = testchipip.serdes.ExternalSyncSerialParams(width=4) // 4-bit bidir interface, sync'd to an external clock + ))) ++ + + new freechips.rocketchip.subsystem.WithNoMemPort ++ // Remove axi4 mem port new freechips.rocketchip.subsystem.WithNMemoryChannels(1) ++ // 1 memory channel //================================== // Set up buses //================================== - new testchipip.WithOffchipBusClient(MBUS) ++ // offchip bus connects to MBUS, since the serial-tl needs to provide backing memory - new testchipip.WithOffchipBus ++ // attach a offchip bus, since the serial-tl will master some external tilelink memory + new testchipip.soc.WithOffchipBusClient(MBUS) ++ // offchip bus connects to MBUS, since the serial-tl needs to provide backing memory + new testchipip.soc.WithOffchipBus ++ // attach a offchip bus, since the serial-tl will master some external tilelink memory //================================== // Set up clock./reset @@ -43,6 +53,10 @@ class ChipLikeRocketConfig extends Config( new chipyard.config.AbstractConfig) +class FlatChipTopChipLikeRocketConfig extends Config( + new chipyard.example.WithFlatChipTop ++ + new chipyard.ChipLikeRocketConfig) + // A simple config demonstrating a "bringup prototype" to bringup the ChipLikeRocketconfig class ChipBringupHostConfig extends Config( //============================= @@ -56,17 +70,23 @@ class ChipBringupHostConfig extends Config( //============================= // Setup the SerialTL side on the bringup device //============================= - new testchipip.WithSerialTLWidth(4) ++ // match width with the chip - new testchipip.WithSerialTLMem(base = 0x0, size = 0x80000000L, // accessible memory of the chip that doesn't come from the tethered host - idBits = 4, isMainMemory = false) ++ // This assumes off-chip mem starts at 0x8000_0000 - new testchipip.WithSerialTLClockDirection(provideClockFreqMHz = Some(75)) ++ // bringup board drives the clock for the serial-tl receiver on the chip, use 75MHz clock + new testchipip.serdes.WithSerialTL(Seq(testchipip.serdes.SerialTLParams( + manager = Some(testchipip.serdes.SerialTLManagerParams( + memParams = Seq(testchipip.serdes.ManagerRAMParams( // Bringup platform can access all memory from 0 to DRAM_BASE + address = BigInt("00000000", 16), + size = BigInt("80000000", 16) + )) + )), + client = Some(testchipip.serdes.SerialTLClientParams()), // Allow chip to access this device's memory (DRAM) + phyParams = testchipip.serdes.InternalSyncSerialParams(width=4, freqMHz = 75) // bringup platform provides the clock + ))) ++ //============================ // Setup bus topology on the bringup system //============================ - new testchipip.WithOffchipBusClient(SBUS, // offchip bus hangs off the SBUS + new testchipip.soc.WithOffchipBusClient(SBUS, // offchip bus hangs off the SBUS blockRange = AddressSet.misaligned(0x80000000L, (BigInt(1) << 30) * 4)) ++ // offchip bus should not see the main memory of the testchip, since that can be accessed directly - new testchipip.WithOffchipBus ++ // offchip bus + new testchipip.soc.WithOffchipBus ++ // offchip bus //============================= // Set up memory on the bringup system @@ -76,7 +96,7 @@ class ChipBringupHostConfig extends Config( //============================= // Generate the TSI-over-UART side of the bringup system //============================= - new testchipip.WithUARTTSIClient(initBaudRate = BigInt(921600)) ++ // nonstandard baud rate to improve performance + new testchipip.tsi.WithUARTTSIClient(initBaudRate = BigInt(921600)) ++ // nonstandard baud rate to improve performance //============================= // Set up clocks of the bringup system @@ -85,6 +105,9 @@ class ChipBringupHostConfig extends Config( new chipyard.config.WithFrontBusFrequency(75.0) ++ // run all buses of this system at 75 MHz new chipyard.config.WithMemoryBusFrequency(75.0) ++ new chipyard.config.WithPeripheryBusFrequency(75.0) ++ + new chipyard.config.WithSystemBusFrequency(75.0) ++ + new chipyard.config.WithControlBusFrequency(75.0) ++ + new chipyard.config.WithOffchipBusFrequency(75.0) ++ // Base is the no-cores config new chipyard.NoCoresConfig) @@ -103,5 +126,9 @@ class TetheredChipLikeRocketConfig extends Config( class VerilatorCITetheredChipLikeRocketConfig extends Config( new chipyard.harness.WithAbsoluteFreqHarnessClockInstantiator ++ // use absolute freqs for sims in the harness new chipyard.harness.WithMultiChipSerialTL(0, 1) ++ // connect the serial-tl ports of the chips together - new chipyard.harness.WithMultiChip(0, new chipyard.config.WithNoResetSynchronizers ++ new ChipLikeRocketConfig) ++ + new chipyard.harness.WithMultiChip(0, // These fragments remove all troublesome + new chipyard.clocking.WithPLLSelectorDividerClockGenerator(enable=false) ++ // clocking features from the design + new chipyard.iobinders.WithDebugIOCells(syncReset = false) ++ + new chipyard.config.WithNoResetSynchronizers ++ + new ChipLikeRocketConfig) ++ new chipyard.harness.WithMultiChip(1, new ChipBringupHostConfig)) diff --git a/generators/chipyard/src/main/scala/config/ChipletConfigs.scala b/generators/chipyard/src/main/scala/config/ChipletConfigs.scala new file mode 100644 index 00000000..a7d2113f --- /dev/null +++ b/generators/chipyard/src/main/scala/config/ChipletConfigs.scala @@ -0,0 +1,47 @@ +package chipyard + +import org.chipsalliance.cde.config.{Config} +import freechips.rocketchip.diplomacy.{AddressSet} +import freechips.rocketchip.subsystem.{SBUS} +import testchipip.soc.{OBUS} + +// ------------------------------------------------ +// Configs demonstrating chip-to-chip communication +// ------------------------------------------------ + +// Simple design which exposes a second serial-tl port that can connect to another instance of itself +class SymmetricChipletRocketConfig extends Config( + new testchipip.soc.WithChipIdPin ++ // Add pin to identify chips + new chipyard.harness.WithSerialTLTiedOff(tieoffs=Some(Seq(1))) ++ // Tie-off the chip-to-chip link in single-chip sims + new testchipip.serdes.WithSerialTL(Seq( + testchipip.serdes.SerialTLParams( // 0th serial-tl is chip-to-bringup-fpga + client = Some(testchipip.serdes.SerialTLClientParams()), // bringup serial-tl acts only as a client + phyParams = testchipip.serdes.ExternalSyncSerialParams() // bringup serial-tl is sync'd to external clock + ), + testchipip.serdes.SerialTLParams( // 1st serial-tl is chip-to-chip + client = Some(testchipip.serdes.SerialTLClientParams()), // chip-to-chip serial-tl acts as a client + manager = Some(testchipip.serdes.SerialTLManagerParams( // chip-to-chip serial-tl managers other chip's memory + memParams = Seq(testchipip.serdes.ManagerRAMParams( + address = 0, + size = 1L << 32, + )), + slaveWhere = OBUS + )), + phyParams = testchipip.serdes.SourceSyncSerialParams() // chip-to-chip serial-tl is symmetric source-sync'd + )) + ) ++ + new testchipip.soc.WithOffchipBusClient(SBUS, // obus provides path to other chip's memory + blockRange = Seq(AddressSet(0, (1L << 32) - 1)), // The lower 4GB is mapped to this chip + replicationBase = Some(1L << 32) // The upper 4GB goes off-chip + ) ++ + new testchipip.soc.WithOffchipBus ++ + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) + +// Simulates 2X of the SymmetricChipletRocketConfig in a multi-sim config +class MultiSimSymmetricChipletRocketConfig extends Config( + new chipyard.harness.WithAbsoluteFreqHarnessClockInstantiator ++ + new chipyard.harness.WithMultiChipSerialTL(chip0=0, chip1=1, chip0portId=1, chip1portId=1) ++ + new chipyard.harness.WithMultiChip(0, new SymmetricChipletRocketConfig) ++ + new chipyard.harness.WithMultiChip(1, new SymmetricChipletRocketConfig) +) diff --git a/generators/chipyard/src/main/scala/config/MMIOAcceleratorConfigs.scala b/generators/chipyard/src/main/scala/config/MMIOAcceleratorConfigs.scala index 16e6b313..8d6f1063 100644 --- a/generators/chipyard/src/main/scala/config/MMIOAcceleratorConfigs.scala +++ b/generators/chipyard/src/main/scala/config/MMIOAcceleratorConfigs.scala @@ -9,7 +9,7 @@ import freechips.rocketchip.diplomacy.{AsynchronousCrossing} // DOC include start: FFTRocketConfig class FFTRocketConfig extends Config( - new chipyard.iobinders.WithDontTouchIOBinders(false) ++ // TODO: hack around dontTouch not working in SFC + new chipyard.harness.WithDontTouchChipTopPorts(false) ++ // TODO: hack around dontTouch not working in SFC new fftgenerator.WithFFTGenerator(numPoints=8, width=16, decPt=8) ++ // add 8-point mmio fft at the default addr (0x2400) with 16bit fixed-point numbers. new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.AbstractConfig) @@ -59,7 +59,7 @@ class LargeNVDLARocketConfig extends Config( new chipyard.config.AbstractConfig) class ManyMMIOAcceleratorRocketConfig extends Config( - new chipyard.iobinders.WithDontTouchIOBinders(false) ++ // TODO: hack around dontTouch not working in SFC + new chipyard.harness.WithDontTouchChipTopPorts(false) ++ // TODO: hack around dontTouch not working in SFC new fftgenerator.WithFFTGenerator(numPoints=8, width=16, decPt=8) ++ // add 8-point mmio fft at the default addr (0x2400) with 16bit fixed-point numbers. new chipyard.example.WithStreamingPassthrough ++ // use top with tilelink-controlled streaming passthrough new chipyard.example.WithStreamingFIR ++ // use top with tilelink-controlled streaming FIR diff --git a/generators/chipyard/src/main/scala/config/MemorySystemConfigs.scala b/generators/chipyard/src/main/scala/config/MemorySystemConfigs.scala new file mode 100644 index 00000000..c49f85ee --- /dev/null +++ b/generators/chipyard/src/main/scala/config/MemorySystemConfigs.scala @@ -0,0 +1,41 @@ +package chipyard + +import org.chipsalliance.cde.config.{Config} +import freechips.rocketchip.diplomacy.{AsynchronousCrossing} + +// ------------------------------------------------------------ +// Configs which demonstrate modifying the uncore memory system +// ------------------------------------------------------------ + +class SimAXIRocketConfig extends Config( + new chipyard.harness.WithSimAXIMem ++ // drive the master AXI4 memory with a SimAXIMem, a 1-cycle magic memory, instead of default SimDRAM + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) + +class GB1MemoryRocketConfig extends Config( + new freechips.rocketchip.subsystem.WithExtMemSize((1<<30) * 1L) ++ // use 1GB simulated external memory + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) + +// DOC include start: mbusscratchpadrocket +class MbusScratchpadOnlyRocketConfig extends Config( + new testchipip.soc.WithMbusScratchpad(banks=2, partitions=2) ++ // add 2 partitions of 2 banks mbus backing scratchpad + new freechips.rocketchip.subsystem.WithNoMemPort ++ // remove offchip mem port + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) +// DOC include end: mbusscratchpadrocket + +class SbusScratchpadRocketConfig extends Config( + new testchipip.soc.WithSbusScratchpad(base=0x70000000L, banks=4) ++ // add 4 banks sbus scratchpad + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) + +class SbusBypassRocketConfig extends Config( + new freechips.rocketchip.subsystem.WithExtMemSbusBypass ++ // Add bypass path to access DRAM incoherently through an address alias + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) + +class QuadChannelRocketConfig extends Config( + new freechips.rocketchip.subsystem.WithNMemoryChannels(4) ++ // 4 AXI4 channels + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.AbstractConfig) diff --git a/generators/chipyard/src/main/scala/config/NoCConfigs.scala b/generators/chipyard/src/main/scala/config/NoCConfigs.scala index 0b6be558..4288fa84 100644 --- a/generators/chipyard/src/main/scala/config/NoCConfigs.scala +++ b/generators/chipyard/src/main/scala/config/NoCConfigs.scala @@ -6,6 +6,7 @@ import freechips.rocketchip.subsystem.{SBUS, MBUS} import constellation.channel._ import constellation.routing._ +import constellation.router._ import constellation.topology._ import constellation.noc._ import constellation.soc.{GlobalNoCParams} @@ -45,7 +46,7 @@ import scala.collection.immutable.ListMap * | SI:Core 2 | SO:system[0] | SO:system[1] | SI:Core 3 | * |(0)___________|(1)___________|(2)___________|(3)___________| * | FBus | Core 0 | Core 1 | Pbus | - * | SI:serial-tl | SI:Core 0 | SI:Core 1 | SO:pbus | + * | SI:serial_tl | SI:Core 0 | SI:Core 1 | SO:pbus | * |______________|______________|______________|______________| * * |(0)___________|(1)___________|(2)___________|(3)___________| @@ -62,37 +63,37 @@ import scala.collection.immutable.ListMap */ // DOC include start: MultiNoCConfig class MultiNoCConfig extends Config( - new constellation.soc.WithCbusNoC(constellation.protocol.TLNoCParams( + new constellation.soc.WithCbusNoC(constellation.protocol.SimpleTLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap( - "serial-tl" -> 0), + "serial_tl" -> 0), outNodeMapping = ListMap( - "error" -> 1, "l2[0]" -> 2, "pbus" -> 3, "plic" -> 4, + "error" -> 1, "ctrls[0]" -> 2, "pbus" -> 3, "plic" -> 4, "clint" -> 5, "dmInner" -> 6, "bootrom" -> 7, "clock" -> 8)), NoCParams( topology = TerminalRouter(BidirectionalLine(9)), channelParamGen = (a, b) => UserChannelParams(Seq.fill(5) { UserVirtualChannelParams(4) }), routingRelation = NonblockingVirtualSubnetworksRouting(TerminalRouterRouting(BidirectionalLineRouting()), 5, 1)) )) ++ - new constellation.soc.WithMbusNoC(constellation.protocol.TLNoCParams( + new constellation.soc.WithMbusNoC(constellation.protocol.SimpleTLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap( "L2 InclusiveCache[0]" -> 1, "L2 InclusiveCache[1]" -> 2, "L2 InclusiveCache[2]" -> 5, "L2 InclusiveCache[3]" -> 6), outNodeMapping = ListMap( "system[0]" -> 0, "system[1]" -> 3, "system[2]" -> 4 , "system[3]" -> 7, - "serdesser" -> 0)), + "serial_tl_0" -> 0)), NoCParams( topology = TerminalRouter(BidirectionalTorus1D(8)), channelParamGen = (a, b) => UserChannelParams(Seq.fill(10) { UserVirtualChannelParams(4) }), routingRelation = BlockingVirtualSubnetworksRouting(TerminalRouterRouting(BidirectionalTorus1DShortestRouting()), 5, 2)) )) ++ - new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams( + new constellation.soc.WithSbusNoC(constellation.protocol.SimpleTLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap( "Core 0" -> 1, "Core 1" -> 2, "Core 2" -> 4 , "Core 3" -> 7, "Core 4" -> 8, "Core 5" -> 11, "Core 6" -> 13, "Core 7" -> 14, - "serial-tl" -> 0), + "serial_tl" -> 0), outNodeMapping = ListMap( "system[0]" -> 5, "system[1]" -> 6, "system[2]" -> 9, "system[3]" -> 10, "pbus" -> 3)), @@ -133,7 +134,7 @@ class MultiNoCConfig extends Config( * Core 6 | SI | Core 6 | 16 * Core 7 | SI | Core 7 | 18 * Core 8 | SI | Core 8 | 19 - * fbus | SI | serial-tl | 9 + * fbus | SI | serial_tl | 9 * pbus | SO | pbus | 4 * L2 0 | SO | system[0] | 0 * L2 1 | SO | system[1] | 2 @@ -145,7 +146,7 @@ class MultiNoCConfig extends Config( * L2 3 | MI | Cache[3] | 6 * DRAM 0 | MO | system[0] | 3 * DRAM 1 | MO | system[1] | 5 - * extram | MO | serdesser | 9 + * spad | MO | ram[0] | 9 */ // DOC include start: SharedNoCConfig class SharedNoCConfig extends Config( @@ -162,24 +163,24 @@ class SharedNoCConfig extends Config( BidirectionalLineRouting()))), 10, 2) ) )) ++ - new constellation.soc.WithMbusNoC(constellation.protocol.TLNoCParams( + new constellation.soc.WithMbusNoC(constellation.protocol.GlobalTLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap( "Cache[0]" -> 0, "Cache[1]" -> 2, "Cache[2]" -> 8, "Cache[3]" -> 6), outNodeMapping = ListMap( "system[0]" -> 3, "system[1]" -> 5, - "serdesser" -> 9)) - ), true) ++ - new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams( + "ram[0]" -> 9)) + )) ++ + new constellation.soc.WithSbusNoC(constellation.protocol.GlobalTLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap( - "serial-tl" -> 9, "Core 0" -> 2, + "serial_tl" -> 9, "Core 0" -> 2, "Core 1" -> 10, "Core 2" -> 11, "Core 3" -> 13, "Core 4" -> 14, "Core 5" -> 15, "Core 6" -> 16, "Core 7" -> 18, "Core 8" -> 19), outNodeMapping = ListMap( "system[0]" -> 0, "system[1]" -> 2, "system[2]" -> 8, "system[3]" -> 6, "pbus" -> 4)) - ), true) ++ + )) ++ new freechips.rocketchip.subsystem.WithNBigCores(8) ++ new freechips.rocketchip.subsystem.WithNBanks(4) ++ new freechips.rocketchip.subsystem.WithNMemoryChannels(2) ++ @@ -187,8 +188,9 @@ class SharedNoCConfig extends Config( ) // DOC include end: SharedNoCConfig +// This Config implements a simple ring interconnect for the system bus class SbusRingNoCConfig extends Config( - new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams( + new constellation.soc.WithSbusNoC(constellation.protocol.SplitACDxBETLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap( "Core 0" -> 0, @@ -199,19 +201,67 @@ class SbusRingNoCConfig extends Config( "Core 5" -> 5, "Core 6" -> 6, "Core 7" -> 7, - "serial-tl" -> 8), + "serial_tl" -> 8), outNodeMapping = ListMap( "system[0]" -> 9, "system[1]" -> 10, "system[2]" -> 11, "system[3]" -> 12, "pbus" -> 8)), // TSI is on the pbus, so serial-tl and pbus should be on the same node - NoCParams( + acdNoCParams = NoCParams( topology = UnidirectionalTorus1D(13), - channelParamGen = (a, b) => UserChannelParams(Seq.fill(10) { UserVirtualChannelParams(4) }), - routingRelation = NonblockingVirtualSubnetworksRouting(UnidirectionalTorus1DDatelineRouting(), 5, 2)) + channelParamGen = (a, b) => UserChannelParams(Seq.fill(6) { UserVirtualChannelParams(4) }), + routingRelation = NonblockingVirtualSubnetworksRouting(UnidirectionalTorus1DDatelineRouting(), 3, 2)), + beNoCParams = NoCParams( + topology = UnidirectionalTorus1D(13), + channelParamGen = (a, b) => UserChannelParams(Seq.fill(4) { UserVirtualChannelParams(1) }), + routingRelation = NonblockingVirtualSubnetworksRouting(UnidirectionalTorus1DDatelineRouting(), 2, 2)) )) ++ new freechips.rocketchip.subsystem.WithNBigCores(8) ++ new freechips.rocketchip.subsystem.WithNBanks(4) ++ new chipyard.config.AbstractConfig ) + +// This config integrates a mesh interconnect for the system bus, and divides the system bus +// tilelink messages across two isolated interconnects +class SbusMeshNoCConfig extends Config( + new constellation.soc.WithSbusNoC(constellation.protocol.SplitACDxBETLNoCParams( + constellation.protocol.DiplomaticNetworkNodeMapping( + inNodeMapping = ListMap( + "Core 0 " -> 0, + "Core 1 " -> 1, + "Core 2 " -> 2, + "Core 3 " -> 3, + "Core 4 " -> 4, + "Core 5 " -> 7, + "Core 6 " -> 8, + "Core 7 " -> 11, + "Core 8 " -> 12, + "Core 9 " -> 13, + "Core 10 " -> 14, + "Core 11 " -> 15, + "serial-tl" -> 0), + outNodeMapping = ListMap( + "system[0]" -> 5, + "system[1]" -> 6, + "system[2]" -> 9, + "system[3]" -> 10, + "pbus" -> 0)), // TSI is on the pbus, so serial-tl and pbus should be on the same node + acdNoCParams = NoCParams( + topology = Mesh2D(4, 4), + channelParamGen = (a, b) => UserChannelParams(Seq.fill(3) { UserVirtualChannelParams(3) }, unifiedBuffer = false), + routerParams = (i) => UserRouterParams(combineRCVA=true, combineSAST=true), + routingRelation = NonblockingVirtualSubnetworksRouting(Mesh2DDimensionOrderedRouting(), 3, 1)), + beNoCParams = NoCParams( + topology = Mesh2D(4, 4), + channelParamGen = (a, b) => UserChannelParams(Seq.fill(2) { UserVirtualChannelParams(3) }, unifiedBuffer = false), + routerParams = (i) => UserRouterParams(combineRCVA=true, combineSAST=true), + routingRelation = NonblockingVirtualSubnetworksRouting(Mesh2DDimensionOrderedRouting(), 2, 1)), + beDivision = 4 + )) ++ + new freechips.rocketchip.subsystem.WithNBigCores(12) ++ + new freechips.rocketchip.subsystem.WithNBanks(4) ++ + new chipyard.config.WithSystemBusWidth(128) ++ + new chipyard.config.AbstractConfig +) + diff --git a/generators/chipyard/src/main/scala/config/NoCoreConfigs.scala b/generators/chipyard/src/main/scala/config/NoCoreConfigs.scala index 19e9a7e0..6647e516 100644 --- a/generators/chipyard/src/main/scala/config/NoCoreConfigs.scala +++ b/generators/chipyard/src/main/scala/config/NoCoreConfigs.scala @@ -4,8 +4,9 @@ import org.chipsalliance.cde.config.{Config} // A empty config with no cores. Useful for testing class NoCoresConfig extends Config( - new testchipip.WithNoBootAddrReg ++ - new testchipip.WithNoCustomBootPin ++ + new testchipip.soc.WithNoScratchpads ++ + new testchipip.boot.WithNoBootAddrReg ++ + new testchipip.boot.WithNoCustomBootPin ++ new chipyard.config.WithNoCLINT ++ new chipyard.config.WithNoBootROM ++ new chipyard.config.WithBroadcastManager ++ diff --git a/generators/chipyard/src/main/scala/config/PeripheralDeviceConfigs.scala b/generators/chipyard/src/main/scala/config/PeripheralDeviceConfigs.scala index 7ad7a1ac..99400743 100644 --- a/generators/chipyard/src/main/scala/config/PeripheralDeviceConfigs.scala +++ b/generators/chipyard/src/main/scala/config/PeripheralDeviceConfigs.scala @@ -22,13 +22,13 @@ class SmallSPIFlashRocketConfig extends Config( class SimBlockDeviceRocketConfig extends Config( new chipyard.harness.WithSimBlockDevice ++ // drive block-device IOs with SimBlockDevice - new testchipip.WithBlockDevice ++ // add block-device module to peripherybus + new testchipip.iceblk.WithBlockDevice ++ // add block-device module to peripherybus new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.AbstractConfig) class BlockDeviceModelRocketConfig extends Config( new chipyard.harness.WithBlockDeviceModel ++ // drive block-device IOs with a BlockDeviceModel - new testchipip.WithBlockDevice ++ // add block-device module to periphery bus + new testchipip.iceblk.WithBlockDevice ++ // add block-device module to periphery bus new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.AbstractConfig) @@ -52,8 +52,11 @@ class MMIORocketConfig extends Config( new chipyard.config.AbstractConfig) class LBWIFRocketConfig extends Config( - new testchipip.WithSerialTLMem(isMainMemory=true) ++ // set lbwif memory base to DRAM_BASE, use as main memory - new freechips.rocketchip.subsystem.WithNoMemPort ++ // remove AXI4 backing memory + new chipyard.config.WithOffchipBusFrequency(500) ++ + new testchipip.soc.WithOffchipBusClient(MBUS) ++ + new testchipip.soc.WithOffchipBus ++ + new testchipip.serdes.WithSerialTLMem(isMainMemory=true) ++ // set lbwif memory base to DRAM_BASE, use as main memory + new freechips.rocketchip.subsystem.WithNoMemPort ++ // remove AXI4 backing memory new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.AbstractConfig) @@ -66,10 +69,10 @@ class dmiRocketConfig extends Config( // DOC include end: DmiRocket class ManyPeripheralsRocketConfig extends Config( - new testchipip.WithBlockDevice ++ // add block-device module to peripherybus - new testchipip.WithOffchipBusClient(MBUS) ++ // OBUS provides backing memory to the MBUS - new testchipip.WithOffchipBus ++ // OBUS must exist for serial-tl to master off-chip memory - new testchipip.WithSerialTLMem(isMainMemory=true) ++ // set lbwif memory base to DRAM_BASE, use as main memory + new testchipip.iceblk.WithBlockDevice ++ // add block-device module to peripherybus + new testchipip.soc.WithOffchipBusClient(MBUS) ++ // OBUS provides backing memory to the MBUS + new testchipip.soc.WithOffchipBus ++ // OBUS must exist for serial-tl to master off-chip memory + new testchipip.serdes.WithSerialTLMem(isMainMemory=true) ++ // set lbwif memory base to DRAM_BASE, use as main memory new chipyard.harness.WithSimSPIFlashModel(true) ++ // add the SPI flash model in the harness (read-only) new chipyard.harness.WithSimBlockDevice ++ // drive block-device IOs with SimBlockDevice new chipyard.config.WithSPIFlash ++ // add the SPI flash controller @@ -79,14 +82,9 @@ class ManyPeripheralsRocketConfig extends Config( new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.AbstractConfig) -class QuadChannelRocketConfig extends Config( - new freechips.rocketchip.subsystem.WithNMemoryChannels(4) ++ // 4 AXI4 channels - new freechips.rocketchip.subsystem.WithNBigCores(1) ++ - new chipyard.config.AbstractConfig) - class UARTTSIRocketConfig extends Config( new chipyard.harness.WithSerialTLTiedOff ++ - new testchipip.WithUARTTSIClient ++ + new testchipip.tsi.WithUARTTSIClient ++ new chipyard.config.WithMemoryBusFrequency(10) ++ new chipyard.config.WithFrontBusFrequency(10) ++ new chipyard.config.WithPeripheryBusFrequency(10) ++ diff --git a/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala b/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala index 4077fcbd..0796bade 100644 --- a/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala +++ b/generators/chipyard/src/main/scala/config/RoCCAcceleratorConfigs.scala @@ -56,3 +56,9 @@ class HwachaLargeBoomConfig extends Config( new boom.common.WithNLargeBooms(1) ++ new chipyard.config.WithSystemBusWidth(128) ++ new chipyard.config.AbstractConfig) + +class AES256ECBRocketConfig extends Config( + new aes.WithAES256ECBAccel ++ // use Caliptra AES 256 ECB accelerator + new freechips.rocketchip.subsystem.WithNBigCores(1) ++ + new chipyard.config.WithSystemBusWidth(256) ++ + new chipyard.config.AbstractConfig) diff --git a/generators/chipyard/src/main/scala/config/RocketConfigs.scala b/generators/chipyard/src/main/scala/config/RocketConfigs.scala index c45fb6f2..0ddb3737 100644 --- a/generators/chipyard/src/main/scala/config/RocketConfigs.scala +++ b/generators/chipyard/src/main/scala/config/RocketConfigs.scala @@ -2,6 +2,7 @@ package chipyard import org.chipsalliance.cde.config.{Config} import freechips.rocketchip.diplomacy.{AsynchronousCrossing} +import freechips.rocketchip.subsystem.{InCluster} // -------------- // Rocket Configs @@ -12,18 +13,14 @@ class RocketConfig extends Config( new chipyard.config.AbstractConfig) class TinyRocketConfig extends Config( - new chipyard.iobinders.WithDontTouchIOBinders(false) ++ // TODO FIX: Don't dontTouch the ports + new chipyard.harness.WithDontTouchChipTopPorts(false) ++ // TODO FIX: Don't dontTouch the ports + new testchipip.soc.WithNoScratchpads ++ // All memory is the Rocket TCMs new freechips.rocketchip.subsystem.WithIncoherentBusTopology ++ // use incoherent bus topology new freechips.rocketchip.subsystem.WithNBanks(0) ++ // remove L2$ new freechips.rocketchip.subsystem.WithNoMemPort ++ // remove backing memory new freechips.rocketchip.subsystem.With1TinyCore ++ // single tiny rocket-core new chipyard.config.AbstractConfig) -class SimAXIRocketConfig extends Config( - new chipyard.harness.WithSimAXIMem ++ // drive the master AXI4 memory with a SimAXIMem, a 1-cycle magic memory, instead of default SimDRAM - new freechips.rocketchip.subsystem.WithNBigCores(1) ++ - new chipyard.config.AbstractConfig) - class QuadRocketConfig extends Config( new freechips.rocketchip.subsystem.WithNBigCores(4) ++ // quad-core (4 RocketTiles) new chipyard.config.AbstractConfig) @@ -38,14 +35,10 @@ class RV32RocketConfig extends Config( new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.AbstractConfig) -class GB1MemoryRocketConfig extends Config( - new freechips.rocketchip.subsystem.WithExtMemSize((1<<30) * 1L) ++ // use 1GB simulated external memory - new freechips.rocketchip.subsystem.WithNBigCores(1) ++ - new chipyard.config.AbstractConfig) - // DOC include start: l1scratchpadrocket class ScratchpadOnlyRocketConfig extends Config( new chipyard.config.WithL2TLBs(0) ++ + new testchipip.soc.WithNoScratchpads ++ // remove subsystem scratchpads, confusingly named, does not remove the L1D$ scratchpads new freechips.rocketchip.subsystem.WithNBanks(0) ++ new freechips.rocketchip.subsystem.WithNoMemPort ++ // remove offchip mem port new freechips.rocketchip.subsystem.WithScratchpadsOnly ++ // use rocket l1 DCache scratchpad as base phys mem @@ -65,26 +58,12 @@ class L1ScratchpadRocketConfig extends Config( new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new chipyard.config.AbstractConfig) -// DOC include start: mbusscratchpadrocket -class MbusScratchpadOnlyRocketConfig extends Config( - new testchipip.WithMbusScratchpad(banks=2, partitions=2) ++ // add 2 partitions of 2 banks mbus backing scratchpad - new freechips.rocketchip.subsystem.WithNoMemPort ++ // remove offchip mem port - new freechips.rocketchip.subsystem.WithNBigCores(1) ++ - new chipyard.config.AbstractConfig) -// DOC include end: mbusscratchpadrocket - -class SbusScratchpadRocketConfig extends Config( - new testchipip.WithSbusScratchpad(base=0x70000000L, banks=4) ++ // add 4 banks sbus backing scratchpad - new freechips.rocketchip.subsystem.WithNBigCores(1) ++ - new chipyard.config.AbstractConfig) - - class MulticlockRocketConfig extends Config( new freechips.rocketchip.subsystem.WithAsynchronousRocketTiles(3, 3) ++ // Add async crossings between RocketTile and uncore new freechips.rocketchip.subsystem.WithNBigCores(1) ++ // Frequency specifications new chipyard.config.WithTileFrequency(1000.0) ++ // Matches the maximum frequency of U540 - new chipyard.clocking.WithClockGroupsCombinedByName(("uncore" , Seq("sbus", "cbus", "implicit"), Nil), + new chipyard.clocking.WithClockGroupsCombinedByName(("uncore" , Seq("sbus", "cbus", "implicit", "clock_tap"), Nil), ("periphery", Seq("pbus", "fbus"), Nil)) ++ new chipyard.config.WithSystemBusFrequency(500.0) ++ // Matches the maximum frequency of U540 new chipyard.config.WithMemoryBusFrequency(500.0) ++ // Matches the maximum frequency of U540 @@ -93,10 +72,10 @@ class MulticlockRocketConfig extends Config( new chipyard.config.WithFbusToSbusCrossingType(AsynchronousCrossing()) ++ // Add Async crossing between FBUS and SBUS new chipyard.config.WithCbusToPbusCrossingType(AsynchronousCrossing()) ++ // Add Async crossing between PBUS and CBUS new chipyard.config.WithSbusToMbusCrossingType(AsynchronousCrossing()) ++ // Add Async crossings between backside of L2 and MBUS - new testchipip.WithAsynchronousSerialSlaveCrossing ++ // Add Async crossing between serial and MBUS. Its master-side is tied to the FBUS new chipyard.config.AbstractConfig) class CustomIOChipTopRocketConfig extends Config( + new chipyard.example.WithBrokenOutUARTIO ++ new chipyard.example.WithCustomChipTop ++ new chipyard.example.WithCustomIOCells ++ new freechips.rocketchip.subsystem.WithNBigCores(1) ++ // single rocket-core @@ -110,3 +89,10 @@ class PrefetchingRocketConfig extends Config( new freechips.rocketchip.subsystem.WithNonblockingL1(2) ++ // non-blocking L1D$, L1 prefetching only works with non-blocking L1D$ new freechips.rocketchip.subsystem.WithNBigCores(1) ++ // single rocket-core new chipyard.config.AbstractConfig) + +class ClusteredRocketConfig extends Config( + new freechips.rocketchip.subsystem.WithNBigCores(4, location=InCluster(1)) ++ + new freechips.rocketchip.subsystem.WithNBigCores(4, location=InCluster(0)) ++ + new freechips.rocketchip.subsystem.WithCluster(1) ++ + new freechips.rocketchip.subsystem.WithCluster(0) ++ + new chipyard.config.AbstractConfig) diff --git a/generators/chipyard/src/main/scala/config/SodorConfigs.scala b/generators/chipyard/src/main/scala/config/SodorConfigs.scala index 4181083c..2edda3ce 100644 --- a/generators/chipyard/src/main/scala/config/SodorConfigs.scala +++ b/generators/chipyard/src/main/scala/config/SodorConfigs.scala @@ -7,7 +7,8 @@ import org.chipsalliance.cde.config.{Config} class Sodor1StageConfig extends Config( // Create a Sodor 1-stage core new sodor.common.WithNSodorCores(1, internalTile = sodor.common.Stage1Factory) ++ - new testchipip.WithSerialTLWidth(32) ++ + new testchipip.soc.WithNoScratchpads ++ // No scratchpads + new testchipip.serdes.WithSerialTLWidth(32) ++ new freechips.rocketchip.subsystem.WithScratchpadsOnly ++ // use sodor tile-internal scratchpad new freechips.rocketchip.subsystem.WithNoMemPort ++ // use no external memory new freechips.rocketchip.subsystem.WithNBanks(0) ++ @@ -16,7 +17,8 @@ class Sodor1StageConfig extends Config( class Sodor2StageConfig extends Config( // Create a Sodor 2-stage core new sodor.common.WithNSodorCores(1, internalTile = sodor.common.Stage2Factory) ++ - new testchipip.WithSerialTLWidth(32) ++ + new testchipip.soc.WithNoScratchpads ++ // No scratchpads + new testchipip.serdes.WithSerialTLWidth(32) ++ new freechips.rocketchip.subsystem.WithScratchpadsOnly ++ // use sodor tile-internal scratchpad new freechips.rocketchip.subsystem.WithNoMemPort ++ // use no external memory new freechips.rocketchip.subsystem.WithNBanks(0) ++ @@ -25,7 +27,8 @@ class Sodor2StageConfig extends Config( class Sodor3StageConfig extends Config( // Create a Sodor 1-stage core with two ports new sodor.common.WithNSodorCores(1, internalTile = sodor.common.Stage3Factory(ports = 2)) ++ - new testchipip.WithSerialTLWidth(32) ++ + new testchipip.soc.WithNoScratchpads ++ // No scratchpads + new testchipip.serdes.WithSerialTLWidth(32) ++ new freechips.rocketchip.subsystem.WithScratchpadsOnly ++ // use sodor tile-internal scratchpad new freechips.rocketchip.subsystem.WithNoMemPort ++ // use no external memory new freechips.rocketchip.subsystem.WithNBanks(0) ++ @@ -34,7 +37,8 @@ class Sodor3StageConfig extends Config( class Sodor3StageSinglePortConfig extends Config( // Create a Sodor 3-stage core with one ports (instruction and data memory access controlled by arbiter) new sodor.common.WithNSodorCores(1, internalTile = sodor.common.Stage3Factory(ports = 1)) ++ - new testchipip.WithSerialTLWidth(32) ++ + new testchipip.soc.WithNoScratchpads ++ // No scratchpads + new testchipip.serdes.WithSerialTLWidth(32) ++ new freechips.rocketchip.subsystem.WithScratchpadsOnly ++ // use sodor tile-internal scratchpad new freechips.rocketchip.subsystem.WithNoMemPort ++ // use no external memory new freechips.rocketchip.subsystem.WithNBanks(0) ++ @@ -43,7 +47,8 @@ class Sodor3StageSinglePortConfig extends Config( class Sodor5StageConfig extends Config( // Create a Sodor 5-stage core new sodor.common.WithNSodorCores(1, internalTile = sodor.common.Stage5Factory) ++ - new testchipip.WithSerialTLWidth(32) ++ + new testchipip.soc.WithNoScratchpads ++ // No scratchpads + new testchipip.serdes.WithSerialTLWidth(32) ++ new freechips.rocketchip.subsystem.WithScratchpadsOnly ++ // use sodor tile-internal scratchpad new freechips.rocketchip.subsystem.WithNoMemPort ++ // use no external memory new freechips.rocketchip.subsystem.WithNBanks(0) ++ @@ -52,7 +57,8 @@ class Sodor5StageConfig extends Config( class SodorUCodeConfig extends Config( // Construct a Sodor microcode-based single-bus core new sodor.common.WithNSodorCores(1, internalTile = sodor.common.UCodeFactory) ++ - new testchipip.WithSerialTLWidth(32) ++ + new testchipip.soc.WithNoScratchpads ++ // No scratchpads + new testchipip.serdes.WithSerialTLWidth(32) ++ new freechips.rocketchip.subsystem.WithScratchpadsOnly ++ // use sodor tile-internal scratchpad new freechips.rocketchip.subsystem.WithNoMemPort ++ // use no external memory new freechips.rocketchip.subsystem.WithNBanks(0) ++ diff --git a/generators/chipyard/src/main/scala/config/SpikeConfigs.scala b/generators/chipyard/src/main/scala/config/SpikeConfigs.scala index 4c1fc303..6f4c6ab7 100644 --- a/generators/chipyard/src/main/scala/config/SpikeConfigs.scala +++ b/generators/chipyard/src/main/scala/config/SpikeConfigs.scala @@ -43,7 +43,7 @@ class SpikeUltraFastDevicesConfig extends Config( new chipyard.harness.WithSimBlockDevice ++ new chipyard.harness.WithLoopbackNIC ++ new icenet.WithIceNIC ++ - new testchipip.WithBlockDevice ++ + new testchipip.iceblk.WithBlockDevice ++ new chipyard.WithSpikeTCM ++ new chipyard.WithNSpikeCores(1) ++ diff --git a/generators/chipyard/src/main/scala/config/TracegenConfigs.scala b/generators/chipyard/src/main/scala/config/TracegenConfigs.scala index ab00ad24..c9db790d 100644 --- a/generators/chipyard/src/main/scala/config/TracegenConfigs.scala +++ b/generators/chipyard/src/main/scala/config/TracegenConfigs.scala @@ -7,14 +7,16 @@ class AbstractTraceGenConfig extends Config( new chipyard.harness.WithAbsoluteFreqHarnessClockInstantiator ++ new chipyard.harness.WithBlackBoxSimMem ++ new chipyard.harness.WithTraceGenSuccess ++ - new chipyard.harness.WithClockAndResetFromHarness ++ + new chipyard.harness.WithClockFromHarness ++ + new chipyard.harness.WithResetFromHarness ++ new chipyard.iobinders.WithAXI4MemPunchthrough ++ new chipyard.iobinders.WithTraceGenSuccessPunchthrough ++ new chipyard.clocking.WithPassthroughClockGenerator ++ - new chipyard.clocking.WithClockGroupsCombinedByName(("uncore", Seq("sbus", "implicit"), Nil)) ++ + new chipyard.clocking.WithClockGroupsCombinedByName(("uncore", Seq("sbus"), Nil)) ++ new chipyard.config.WithTracegenSystem ++ - new chipyard.config.WithNoSubsystemDrivenClocks ++ + new chipyard.config.WithNoSubsystemClockIO ++ new chipyard.config.WithMemoryBusFrequency(1000.0) ++ + new chipyard.config.WithControlBusFrequency(1000.0) ++ new chipyard.config.WithSystemBusFrequency(1000.0) ++ new chipyard.config.WithPeripheryBusFrequency(1000.0) ++ new freechips.rocketchip.subsystem.WithCoherentBusTopology ++ @@ -42,6 +44,6 @@ class NonBlockingTraceGenL2Config extends Config( class NonBlockingTraceGenL2RingConfig extends Config( new tracegen.WithL2TraceGen()(List.fill(2)(DCacheParams(nMSHRs = 2, nSets = 16, nWays = 4))) ++ - new testchipip.WithRingSystemBus ++ + new testchipip.soc.WithRingSystemBus ++ new freechips.rocketchip.subsystem.WithInclusiveCache ++ new AbstractTraceGenConfig) diff --git a/generators/chipyard/src/main/scala/config/TutorialConfigs.scala b/generators/chipyard/src/main/scala/config/TutorialConfigs.scala index daa08265..cf93d0e4 100644 --- a/generators/chipyard/src/main/scala/config/TutorialConfigs.scala +++ b/generators/chipyard/src/main/scala/config/TutorialConfigs.scala @@ -77,7 +77,7 @@ class TutorialSha3BlackBoxConfig extends Config( // Tutorial Phase 5: Map a multicore heterogeneous SoC with multiple cores and memory-mapped accelerators class TutorialNoCConfig extends Config( - new chipyard.iobinders.WithDontTouchIOBinders(false) ++ + new chipyard.harness.WithDontTouchChipTopPorts(false) ++ // Try changing the dimensions of the Mesh topology new constellation.soc.WithGlobalNoC(constellation.soc.GlobalNoCParams( NoCParams( @@ -90,14 +90,14 @@ class TutorialNoCConfig extends Config( // The inNodeMapping and outNodeMapping values are the physical identifiers of // routers on the topology to map the agents to. Try changing these to any // value within the range [0, topology.nNodes) - new constellation.soc.WithPbusNoC(constellation.protocol.TLNoCParams( + new constellation.soc.WithPbusNoC(constellation.protocol.GlobalTLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap("Core" -> 7), outNodeMapping = ListMap( "pbus" -> 8, "uart" -> 9, "control" -> 10, "gcd" -> 11, "writeQueue[0]" -> 0, "writeQueue[1]" -> 1, "tailChain[0]" -> 2)) - ), true) ++ - new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams( + )) ++ + new constellation.soc.WithSbusNoC(constellation.protocol.GlobalTLNoCParams( constellation.protocol.DiplomaticNetworkNodeMapping( inNodeMapping = ListMap( "Core 0" -> 0, "Core 1" -> 1, @@ -105,7 +105,7 @@ class TutorialNoCConfig extends Config( outNodeMapping = ListMap( "system[0]" -> 3, "system[1]" -> 4, "system[2]" -> 5, "system[3]" -> 6, "pbus" -> 7)) - ), true) ++ + )) ++ new chipyard.example.WithGCD ++ new chipyard.harness.WithLoopbackNIC ++ new icenet.WithIceNIC ++ diff --git a/generators/chipyard/src/main/scala/config/fragments/ClockingFragments.scala b/generators/chipyard/src/main/scala/config/fragments/ClockingFragments.scala index 2da9fbf2..8cf6ae67 100644 --- a/generators/chipyard/src/main/scala/config/fragments/ClockingFragments.scala +++ b/generators/chipyard/src/main/scala/config/fragments/ClockingFragments.scala @@ -13,13 +13,14 @@ import freechips.rocketchip.tilelink.{HasTLBusParams} import chipyard._ import chipyard.clocking._ +import testchipip.soc.{OffchipBusKey} // The default RocketChip BaseSubsystem drives its diplomatic clock graph // with the implicit clocks of Subsystem. Don't do that, instead we extend // the diplomacy graph upwards into the ChipTop, where we connect it to // our clock drivers -class WithNoSubsystemDrivenClocks extends Config((site, here, up) => { - case SubsystemDriveAsyncClockGroupsKey => None +class WithNoSubsystemClockIO extends Config((site, here, up) => { + case SubsystemDriveClockGroupsFromIO => false }) /** @@ -103,18 +104,29 @@ class WithFrontBusFrequency(freqMHz: Double) extends Config((site, here, up) => class WithControlBusFrequency(freqMHz: Double) extends Config((site, here, up) => { case ControlBusKey => up(ControlBusKey, site).copy(dtsFrequency = Some(BigInt((freqMHz * 1e6).toLong))) }) +class WithOffchipBusFrequency(freqMHz: Double) extends Config((site, here, up) => { + case OffchipBusKey => up(OffchipBusKey, site).copy(dtsFrequency = Some(BigInt((freqMHz * 1e6).toLong))) +}) class WithRationalMemoryBusCrossing extends WithSbusToMbusCrossingType(RationalCrossing(Symmetric)) class WithAsynchrousMemoryBusCrossing extends WithSbusToMbusCrossingType(AsynchronousCrossing()) +// Remove the tile clock gaters in this system class WithNoTileClockGaters extends Config((site, here, up) => { case ChipyardPRCIControlKey => up(ChipyardPRCIControlKey).copy(enableTileClockGating = false) }) +// Remove the tile reset control blocks in this system class WithNoTileResetSetters extends Config((site, here, up) => { case ChipyardPRCIControlKey => up(ChipyardPRCIControlKey).copy(enableTileResetSetting = false) }) +// Remove the global reset synchronizers in this system class WithNoResetSynchronizers extends Config((site, here, up) => { case ChipyardPRCIControlKey => up(ChipyardPRCIControlKey).copy(enableResetSynchronizers = false) }) + +// Remove any ClockTap ports in this system +class WithNoClockTap extends Config((site, here, up) => { + case ClockTapKey => false +}) diff --git a/generators/chipyard/src/main/scala/config/fragments/PeripheralFragments.scala b/generators/chipyard/src/main/scala/config/fragments/PeripheralFragments.scala index 8f52be74..51d31094 100644 --- a/generators/chipyard/src/main/scala/config/fragments/PeripheralFragments.scala +++ b/generators/chipyard/src/main/scala/config/fragments/PeripheralFragments.scala @@ -29,7 +29,7 @@ import chipyard.{ExtTLMem} * @param hang the power-on reset vector, i.e. the program counter will be set to this value on reset * @param contentFileName the path to the BootROM image */ -class WithBootROM(address: BigInt = 0x10000, size: Int = 0x10000, hang: BigInt = 0x10040) extends Config((site, here, up) => { +class WithBootROM(address: BigInt = 0x10000, size: Int = 0x10000, hang: BigInt = 0x10000) extends Config((site, here, up) => { case BootROMLocated(x) => up(BootROMLocated(x), site) .map(_.copy( address = address, diff --git a/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala b/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala index 4680eeeb..c9f7fcdb 100644 --- a/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala +++ b/generators/chipyard/src/main/scala/config/fragments/RoCCFragments.scala @@ -12,15 +12,15 @@ import gemmini._ import chipyard.{TestSuitesKey, TestSuiteHelper} /** - * Map from a hartId to a particular RoCC accelerator + * Map from a tileId to a particular RoCC accelerator */ case object MultiRoCCKey extends Field[Map[Int, Seq[Parameters => LazyRoCC]]](Map.empty[Int, Seq[Parameters => LazyRoCC]]) /** - * Config fragment to enable different RoCCs based on the hartId + * Config fragment to enable different RoCCs based on the tileId */ class WithMultiRoCC extends Config((site, here, up) => { - case BuildRoCC => site(MultiRoCCKey).getOrElse(site(TileKey).hartId, Nil) + case BuildRoCC => site(MultiRoCCKey).getOrElse(site(TileKey).tileId, Nil) }) /** @@ -39,7 +39,7 @@ class WithMultiRoCCFromBuildRoCC(harts: Int*) extends Config((site, here, up) => * * For ex: * Core 0, 1, 2, 3 have been defined earlier - * with hartIds of 0, 1, 2, 3 respectively + * with tileIds of 0, 1, 2, 3 respectively * And you call WithMultiRoCCHwacha(0,1) * Then Core 0 and 1 will get a Hwacha * diff --git a/generators/chipyard/src/main/scala/config/fragments/SubsystemFragments.scala b/generators/chipyard/src/main/scala/config/fragments/SubsystemFragments.scala index 40f18d5d..b4971cba 100644 --- a/generators/chipyard/src/main/scala/config/fragments/SubsystemFragments.scala +++ b/generators/chipyard/src/main/scala/config/fragments/SubsystemFragments.scala @@ -1,12 +1,17 @@ package chipyard.config import org.chipsalliance.cde.config.{Config} -import freechips.rocketchip.subsystem.{SystemBusKey, BankedL2Key, CoherenceManagerWrapper} +import freechips.rocketchip.subsystem._ import freechips.rocketchip.diplomacy.{DTSTimebase} +import sifive.blocks.inclusivecache.{InclusiveCachePortParameters} // Replaces the L2 with a broadcast manager for maintaining coherence class WithBroadcastManager extends Config((site, here, up) => { - case BankedL2Key => up(BankedL2Key, site).copy(coherenceManager = CoherenceManagerWrapper.broadcastManager) + case SubsystemBankedCoherenceKey => up(SubsystemBankedCoherenceKey, site).copy(coherenceManager = CoherenceManagerWrapper.broadcastManager) +}) + +class WithBroadcastParams(params: BroadcastParams) extends Config((site, here, up) => { + case BroadcastKey => params }) class WithSystemBusWidth(bitWidth: Int) extends Config((site, here, up) => { @@ -16,3 +21,13 @@ class WithSystemBusWidth(bitWidth: Int) extends Config((site, here, up) => { class WithDTSTimebase(freqMHz: BigInt) extends Config((site, here, up) => { case DTSTimebase => freqMHz }) + +// Adds buffers on the interior of the inclusive LLC, to improve PD +class WithInclusiveCacheInteriorBuffer(buffer: InclusiveCachePortParameters = InclusiveCachePortParameters.full) extends Config((site, here, up) => { + case InclusiveCacheKey => up(InclusiveCacheKey).copy(bufInnerInterior=buffer, bufOuterInterior=buffer) +}) + +// Adds buffers on the exterior of the inclusive LLC, to improve PD +class WithInclusiveCacheExteriorBuffer(buffer: InclusiveCachePortParameters = InclusiveCachePortParameters.full) extends Config((site, here, up) => { + case InclusiveCacheKey => up(InclusiveCacheKey).copy(bufInnerExterior=buffer, bufOuterExterior=buffer) +}) diff --git a/generators/chipyard/src/main/scala/config/fragments/TileFragments.scala b/generators/chipyard/src/main/scala/config/fragments/TileFragments.scala index 17eaa3f0..392f1508 100644 --- a/generators/chipyard/src/main/scala/config/fragments/TileFragments.scala +++ b/generators/chipyard/src/main/scala/config/fragments/TileFragments.scala @@ -11,7 +11,7 @@ import boom.common.{BoomTileAttachParams} import cva6.{CVA6TileAttachParams} import sodor.common.{SodorTileAttachParams} import ibex.{IbexTileAttachParams} -import testchipip._ +import testchipip.cosim.{TracePortKey, TracePortParams} import barf.{TilePrefetchingMasterPortParams} class WithL2TLBs(entries: Int) extends Config((site, here, up) => { @@ -66,10 +66,19 @@ class WithNPMPs(n: Int = 8) extends Config((site, here, up) => { } }) +class WithRocketCacheRowBits(rowBits: Int = 64) extends Config((site, here, up) => { + case TilesLocated(InSubsystem) => up(TilesLocated(InSubsystem)) map { + case tp: RocketTileAttachParams => tp.copy(tileParams = tp.tileParams.copy( + dcache = tp.tileParams.dcache.map(_.copy(rowBits = rowBits)), + icache = tp.tileParams.icache.map(_.copy(rowBits = rowBits)) + )) + } +}) + class WithRocketICacheScratchpad extends Config((site, here, up) => { case TilesLocated(InSubsystem) => up(TilesLocated(InSubsystem), site) map { case tp: RocketTileAttachParams => tp.copy(tileParams = tp.tileParams.copy( - icache = tp.tileParams.icache.map(_.copy(itimAddr = Some(0x300000 + tp.tileParams.hartId * 0x10000))) + icache = tp.tileParams.icache.map(_.copy(itimAddr = Some(0x300000 + tp.tileParams.tileId * 0x10000))) )) } }) @@ -77,7 +86,7 @@ class WithRocketICacheScratchpad extends Config((site, here, up) => { class WithRocketDCacheScratchpad extends Config((site, here, up) => { case TilesLocated(InSubsystem) => up(TilesLocated(InSubsystem), site) map { case tp: RocketTileAttachParams => tp.copy(tileParams = tp.tileParams.copy( - dcache = tp.tileParams.dcache.map(_.copy(nSets = 32, nWays = 1, scratch = Some(0x200000 + tp.tileParams.hartId * 0x10000))) + dcache = tp.tileParams.dcache.map(_.copy(nSets = 32, nWays = 1, scratch = Some(0x200000 + tp.tileParams.tileId * 0x10000))) )) } }) @@ -85,14 +94,24 @@ class WithRocketDCacheScratchpad extends Config((site, here, up) => { class WithTilePrefetchers extends Config((site, here, up) => { case TilesLocated(InSubsystem) => up(TilesLocated(InSubsystem), site) map { case tp: RocketTileAttachParams => tp.copy(crossingParams = tp.crossingParams.copy( - master = TilePrefetchingMasterPortParams(tp.tileParams.hartId, tp.crossingParams.master))) + master = TilePrefetchingMasterPortParams(tp.tileParams.tileId, tp.crossingParams.master))) case tp: BoomTileAttachParams => tp.copy(crossingParams = tp.crossingParams.copy( - master = TilePrefetchingMasterPortParams(tp.tileParams.hartId, tp.crossingParams.master))) + master = TilePrefetchingMasterPortParams(tp.tileParams.tileId, tp.crossingParams.master))) case tp: SodorTileAttachParams => tp.copy(crossingParams = tp.crossingParams.copy( - master = TilePrefetchingMasterPortParams(tp.tileParams.hartId, tp.crossingParams.master))) + master = TilePrefetchingMasterPortParams(tp.tileParams.tileId, tp.crossingParams.master))) case tp: IbexTileAttachParams => tp.copy(crossingParams = tp.crossingParams.copy( - master = TilePrefetchingMasterPortParams(tp.tileParams.hartId, tp.crossingParams.master))) + master = TilePrefetchingMasterPortParams(tp.tileParams.tileId, tp.crossingParams.master))) case tp: CVA6TileAttachParams => tp.copy(crossingParams = tp.crossingParams.copy( - master = TilePrefetchingMasterPortParams(tp.tileParams.hartId, tp.crossingParams.master))) + master = TilePrefetchingMasterPortParams(tp.tileParams.tileId, tp.crossingParams.master))) } }) + +// Adds boundary buffers to RocketTiles, which places buffers between the caches and the TileLink interface +// This typically makes it easier to close timing +class WithRocketBoundaryBuffers(buffers: Option[RocketTileBoundaryBufferParams] = Some(RocketTileBoundaryBufferParams(true))) extends Config((site, here, up) => { + case TilesLocated(InSubsystem) => up(TilesLocated(InSubsystem)) map { + case tp: RocketTileAttachParams => tp.copy(tileParams=tp.tileParams.copy( + boundaryBuffers=buffers + )) + } +}) diff --git a/generators/chipyard/src/main/scala/example/CustomChipTop.scala b/generators/chipyard/src/main/scala/example/CustomChipTop.scala index f2ebfc33..f710ccab 100644 --- a/generators/chipyard/src/main/scala/example/CustomChipTop.scala +++ b/generators/chipyard/src/main/scala/example/CustomChipTop.scala @@ -5,9 +5,11 @@ import chipyard.iobinders._ import org.chipsalliance.cde.config._ import freechips.rocketchip.diplomacy.{InModuleBody} +import freechips.rocketchip.subsystem.{PBUS, HasTileLinkLocations} import barstools.iocell.chisel._ import chipyard._ import chipyard.harness.{BuildTop} +import sifive.blocks.devices.uart._ // A "custom" IOCell with additional I/O // The IO don't do anything here in this example @@ -63,3 +65,21 @@ class WithCustomIOCells extends Config((site, here, up) => { class WithCustomChipTop extends Config((site, here, up) => { case BuildTop => (p: Parameters) => new CustomChipTop()(p) }) + +class WithBrokenOutUARTIO extends OverrideIOBinder({ + (system: HasPeripheryUARTModuleImp) => { + val uart_txd = IO(Output(Bool())) + val uart_rxd = IO(Input(Bool())) + system.uart(0).rxd := uart_rxd + uart_txd := system.uart(0).txd + val where = PBUS // TODO fix + val bus = system.outer.asInstanceOf[HasTileLinkLocations].locateTLBusWrapper(where) + val freqMHz = bus.dtsFrequency.get / 1000000 + (Seq(UARTPort(() => { + val uart_wire = Wire(new UARTPortIO(system.uart(0).c)) + uart_wire.txd := uart_txd + uart_rxd := uart_wire.rxd + uart_wire + }, 0, freqMHz.toInt)), Nil) + } +}) diff --git a/generators/chipyard/src/main/scala/example/FlatChipTop.scala b/generators/chipyard/src/main/scala/example/FlatChipTop.scala index 96e21611..d4caa49b 100644 --- a/generators/chipyard/src/main/scala/example/FlatChipTop.scala +++ b/generators/chipyard/src/main/scala/example/FlatChipTop.scala @@ -2,31 +2,34 @@ package chipyard.example import chisel3._ -import org.chipsalliance.cde.config.{Field, Parameters} +import org.chipsalliance.cde.config.{Config, Field, Parameters} import freechips.rocketchip.diplomacy._ import freechips.rocketchip.prci._ import freechips.rocketchip.util._ +import freechips.rocketchip.subsystem.{PBUS, HasTileLinkLocations} import freechips.rocketchip.devices.debug.{ExportDebug, JtagDTMKey, Debug} import freechips.rocketchip.tilelink.{TLBuffer, TLFragmenter} import chipyard.{BuildSystem, DigitalTop} +import chipyard.harness.{BuildTop} import chipyard.clocking._ -import chipyard.iobinders.{IOCellKey, JTAGChipIO} +import chipyard.iobinders._ import barstools.iocell.chisel._ +import testchipip.serdes.{SerialTLKey} +class WithFlatChipTop extends Config((site, here, up) => { + case BuildTop => (p: Parameters) => new FlatChipTop()(p) +}) // This "FlatChipTop" uses no IOBinders, so all the IO have // to be explicitly constructed. // This only supports the base "DigitalTop" -class FlatChipTop(implicit p: Parameters) extends LazyModule { +class FlatChipTop(implicit p: Parameters) extends LazyModule with HasChipyardPorts { override lazy val desiredName = "ChipTop" val system = LazyModule(p(BuildSystem)(p)).suggestName("system").asInstanceOf[DigitalTop] //======================== // Diplomatic clock stuff //======================== - val implicitClockSinkNode = ClockSinkNode(Seq(ClockSinkParameters(name = Some("implicit_clock")))) - system.connectImplicitClockSinkNode(implicitClockSinkNode) - val tlbus = system.locateTLBusWrapper(system.prciParams.slaveWhere) val baseAddress = system.prciParams.baseAddress val clockDivider = system.prci_ctrl_domain { LazyModule(new TLClockDivider (baseAddress + 0x20000, tlbus.beatBytes)) } @@ -37,7 +40,7 @@ class FlatChipTop(implicit p: Parameters) extends LazyModule { tlbus.coupleTo("clock-sel-ctrl") { clockSelector.tlNode := TLFragmenter(tlbus.beatBytes, tlbus.blockBytes) := TLBuffer() := _ } tlbus.coupleTo("pll-ctrl") { pllCtrl.tlNode := TLFragmenter(tlbus.beatBytes, tlbus.blockBytes) := TLBuffer() := _ } - system.allClockGroupsNode := clockDivider.clockNode := clockSelector.clockNode + system.chiptopClockGroupsNode := clockDivider.clockNode := clockSelector.clockNode // Connect all other requested clocks val slowClockSource = ClockSourceNode(Seq(ClockSourceParameters())) @@ -56,28 +59,26 @@ class FlatChipTop(implicit p: Parameters) extends LazyModule { debugClockSinkNode := system.locateTLBusWrapper(p(ExportDebug).slaveWhere).fixedClockNode def debugClockBundle = debugClockSinkNode.in.head._1 + var ports: Seq[Port[_]] = Nil + override lazy val module = new FlatChipTopImpl class FlatChipTopImpl extends LazyRawModuleImp(this) { //========================= // Clock/reset //========================= - val implicit_clock = implicitClockSinkNode.in.head._1.clock - val implicit_reset = implicitClockSinkNode.in.head._1.reset - system.module match { case l: LazyModuleImp => { - l.clock := implicit_clock - l.reset := implicit_reset - }} - - val clock_wire = Wire(Input(new ClockWithFreq(80))) + val clock_wire = Wire(Input(Clock())) val reset_wire = Wire(Input(AsyncReset())) val (clock_pad, clockIOCell) = IOCell.generateIOFromSignal(clock_wire, "clock", p(IOCellKey)) val (reset_pad, resetIOCell) = IOCell.generateIOFromSignal(reset_wire, "reset", p(IOCellKey)) slowClockSource.out.unzip._1.map { o => - o.clock := clock_wire.clock + o.clock := clock_wire o.reset := reset_wire } + ports = ports :+ ClockPort(() => clock_pad, 100.0) + ports = ports :+ ResetPort(() => reset_pad) + // For a real chip you should replace this ClockSourceAtFreqFromPlusArg // with a blackbox of whatever PLL is being integrated val fake_pll = Module(new ClockSourceAtFreqFromPlusArg("pll_freq_mhz")) @@ -93,11 +94,13 @@ class FlatChipTop(implicit p: Parameters) extends LazyModule { // Custom Boot //========================= val (custom_boot_pad, customBootIOCell) = IOCell.generateIOFromSignal(system.custom_boot_pin.get.getWrappedValue, "custom_boot", p(IOCellKey)) + ports = ports :+ CustomBootPort(() => custom_boot_pad) //========================= // Serialized TileLink //========================= - val (serial_tl_pad, serialTLIOCells) = IOCell.generateIOFromSignal(system.serial_tl.get.getWrappedValue, "serial_tl", p(IOCellKey)) + val (serial_tl_pad, serialTLIOCells) = IOCell.generateIOFromSignal(system.serial_tls(0).getWrappedValue, "serial_tl", p(IOCellKey)) + ports = ports :+ SerialTLPort(() => serial_tl_pad, p(SerialTLKey)(0), system.serdessers(0), 0) //========================= // JTAG/Debug @@ -136,12 +139,17 @@ class FlatChipTop(implicit p: Parameters) extends LazyModule { IOCell.generateIOFromSignal(jtag_wire, "jtag", p(IOCellKey), abstractResetAsAsync = true) }.get + ports = ports :+ JTAGPort(() => jtag_pad) + //========================== // UART //========================== require(system.uarts.size == 1) val (uart_pad, uartIOCells) = IOCell.generateIOFromSignal(system.module.uart.head, "uart_0", p(IOCellKey)) - + val where = PBUS // TODO fix + val bus = system.asInstanceOf[HasTileLinkLocations].locateTLBusWrapper(where) + val freqMHz = bus.dtsFrequency.get / 1000000 + ports = ports :+ UARTPort(() => uart_pad, 0, freqMHz.toInt) //========================== // External interrupts (tie off) diff --git a/generators/chipyard/src/main/scala/example/FlatTestHarness.scala b/generators/chipyard/src/main/scala/example/FlatTestHarness.scala index 56bc9a78..9eeabecf 100644 --- a/generators/chipyard/src/main/scala/example/FlatTestHarness.scala +++ b/generators/chipyard/src/main/scala/example/FlatTestHarness.scala @@ -11,7 +11,10 @@ import freechips.rocketchip.util.{PlusArg} import freechips.rocketchip.subsystem.{CacheBlockBytes} import freechips.rocketchip.devices.debug.{SimJTAG} import freechips.rocketchip.jtag.{JTAGIO} -import testchipip.{SerialTLKey, UARTAdapter, SimDRAM, TSIHarness, SimTSI} +import testchipip.serdes._ +import testchipip.uart.{UARTAdapter} +import testchipip.dram.{SimDRAM} +import testchipip.tsi.{TSIHarness, SimTSI, SerialRAM} import chipyard.harness.{BuildTop} // A "flat" TestHarness that doesn't use IOBinders @@ -30,7 +33,7 @@ class FlatTestHarness(implicit val p: Parameters) extends Module { val clock_source = Module(new ClockSourceAtFreqFromPlusArg("slow_clk_freq_mhz")) clock_source.io.power := true.B clock_source.io.gate := false.B - dut.clock_pad.clock := clock_source.io.clk + dut.clock_pad := clock_source.io.clk // Reset dut.reset_pad := reset.asAsyncReset @@ -39,21 +42,32 @@ class FlatTestHarness(implicit val p: Parameters) extends Module { dut.custom_boot_pad := PlusArg("custom_boot_pin", width=1) // Serialized TL - val sVal = p(SerialTLKey).get - val serialTLManagerParams = sVal.serialTLManagerParams.get + val sVal = p(SerialTLKey)(0) + val serialTLManagerParams = sVal.manager.get require(serialTLManagerParams.isMemoryDevice) - withClockAndReset(clock, reset) { - val serial_bits = dut.serial_tl_pad.bits - if (DataMirror.directionOf(dut.serial_tl_pad.clock) == Direction.Input) { - dut.serial_tl_pad.clock := clock - } - val harnessRAM = TSIHarness.connectRAM( - lazyDut.system.serdesser.get, - serial_bits, - reset) - io.success := SimTSI.connect(Some(harnessRAM.module.io.tsi), clock, reset) + // Figure out which clock drives the harness TLSerdes, based on the port type + val serial_ram_clock = dut.serial_tl_pad match { + case io: InternalSyncSerialIO => io.clock_out + case io: ExternalSyncSerialIO => clock + } + dut.serial_tl_pad match { + case io: ExternalSyncSerialIO => io.clock_in := clock + case io: InternalSyncSerialIO => + } + dut.serial_tl_pad match { + case pad: DecoupledSerialIO => { + withClockAndReset(serial_ram_clock, reset) { + // SerialRAM implements the memory regions the chip expects + val ram = Module(LazyModule(new SerialRAM(lazyDut.system.serdessers(0), p(SerialTLKey)(0))).module) + ram.io.ser.in <> pad.out + pad.in <> ram.io.ser.out + + // Allow TSI to master the chip + io.success := SimTSI.connect(ram.io.tsi, serial_ram_clock, reset) + } + } } // JTAG diff --git a/generators/chipyard/src/main/scala/example/GCD.scala b/generators/chipyard/src/main/scala/example/GCD.scala index 5e6c5d67..1c1d2e2f 100644 --- a/generators/chipyard/src/main/scala/example/GCD.scala +++ b/generators/chipyard/src/main/scala/example/GCD.scala @@ -13,7 +13,7 @@ import freechips.rocketchip.util.UIntIsOneOf // DOC include start: GCD params case class GCDParams( - address: BigInt = 0x1000, + address: BigInt = 0x4000, width: Int = 32, useAXI4: Boolean = false, useBlackBox: Boolean = true) @@ -185,7 +185,7 @@ trait CanHavePeripheryGCD { this: BaseSubsystem => // DOC include end: GCD lazy trait // DOC include start: GCD imp trait -trait CanHavePeripheryGCDModuleImp extends LazyModuleImp { +trait CanHavePeripheryGCDModuleImp extends LazyRawModuleImp { val outer: CanHavePeripheryGCD val gcd_busy = outer.gcd match { case Some(gcd) => { diff --git a/generators/chipyard/src/main/scala/example/TutorialTile.scala b/generators/chipyard/src/main/scala/example/TutorialTile.scala index 38c8577a..76b17273 100644 --- a/generators/chipyard/src/main/scala/example/TutorialTile.scala +++ b/generators/chipyard/src/main/scala/example/TutorialTile.scala @@ -82,7 +82,7 @@ case class MyTileAttachParams( case class MyTileParams( name: Option[String] = Some("my_tile"), - hartId: Int = 0, + tileId: Int = 0, trace: Boolean = false, val core: MyCoreParams = MyCoreParams() ) extends InstantiableTileParams[MyTile] @@ -94,9 +94,11 @@ case class MyTileParams( val dcache: Option[DCacheParams] = Some(DCacheParams()) val icache: Option[ICacheParams] = Some(ICacheParams()) val clockSinkParams: ClockSinkParameters = ClockSinkParameters() - def instantiate(crossing: TileCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters): MyTile = { + def instantiate(crossing: HierarchicalElementCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters): MyTile = { new MyTile(this, crossing, lookup) } + val baseName = name.getOrElse("my_tile") + val uniqueName = s"${baseName}_$tileId" } // DOC include start: Tile class @@ -111,11 +113,11 @@ class MyTile( { // Private constructor ensures altered LazyModule.p is used implicitly - def this(params: MyTileParams, crossing: TileCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters) = + def this(params: MyTileParams, crossing: HierarchicalElementCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters) = this(params, crossing.crossingType, lookup, p) // Require TileLink nodes - val intOutwardNode = IntIdentityNode() + val intOutwardNode = None val masterNode = visibilityNode val slaveNode = TLIdentityNode() @@ -135,7 +137,7 @@ class MyTile( } ResourceBinding { - Resource(cpuDevice, "reg").bind(ResourceAddress(hartId)) + Resource(cpuDevice, "reg").bind(ResourceAddress(tileId)) } // TODO: Create TileLink nodes and connections here. @@ -228,15 +230,15 @@ class MyTileModuleImp(outer: MyTile) extends BaseTileModuleImp(outer){ } // DOC include start: Config fragment -class WithNMyCores(n: Int = 1, overrideIdOffset: Option[Int] = None) extends Config((site, here, up) => { +class WithNMyCores(n: Int = 1) extends Config((site, here, up) => { case TilesLocated(InSubsystem) => { // Calculate the next available hart ID (since hart ID cannot be duplicated) val prev = up(TilesLocated(InSubsystem), site) - val idOffset = overrideIdOffset.getOrElse(prev.size) + val idOffset = up(NumTiles) // Create TileAttachParams for every core to be instantiated (0 until n).map { i => MyTileAttachParams( - tileParams = MyTileParams(hartId = i + idOffset), + tileParams = MyTileParams(tileId = i + idOffset), crossingParams = RocketCrossingParams() ) } ++ prev @@ -245,5 +247,6 @@ class WithNMyCores(n: Int = 1, overrideIdOffset: Option[Int] = None) extends Con case SystemBusKey => up(SystemBusKey, site).copy(beatBytes = 8) // The # of instruction bits. Use maximum # of bits if your core supports both 32 and 64 bits. case XLen => 64 + case NumTiles => up(NumTiles) + n }) // DOC include end: Config fragment diff --git a/generators/chipyard/src/main/scala/example/dsptools/GenericFIR.scala b/generators/chipyard/src/main/scala/example/dsptools/GenericFIR.scala index 01d72d24..df2ec35a 100644 --- a/generators/chipyard/src/main/scala/example/dsptools/GenericFIR.scala +++ b/generators/chipyard/src/main/scala/example/dsptools/GenericFIR.scala @@ -199,12 +199,13 @@ class TLGenericFIRChain[T<:Data:Ring] (genIn: T, genOut: T, coeffs: => Seq[T], p trait CanHavePeripheryStreamingFIR extends BaseSubsystem { val streamingFIR = p(GenericFIRKey) match { case Some(params) => { - val streamingFIR = LazyModule(new TLGenericFIRChain( + val domain = pbus.generateSynchronousDomain.suggestName("fir_domain") + val streamingFIR = domain { LazyModule(new TLGenericFIRChain( genIn = FixedPoint(8.W, 3.BP), genOut = FixedPoint(8.W, 3.BP), coeffs = Seq(1.U.asFixedPoint(0.BP), 2.U.asFixedPoint(0.BP), 3.U.asFixedPoint(0.BP)), - params = params)) - pbus.coupleTo("streamingFIR") { streamingFIR.mem.get := TLFIFOFixer() := TLFragmenter(pbus.beatBytes, pbus.blockBytes) := _ } + params = params)) } + pbus.coupleTo("streamingFIR") { domain { streamingFIR.mem.get := TLFIFOFixer() := TLFragmenter(pbus.beatBytes, pbus.blockBytes) } := _ } Some(streamingFIR) } case None => None diff --git a/generators/chipyard/src/main/scala/example/dsptools/StreamingPassthrough.scala b/generators/chipyard/src/main/scala/example/dsptools/StreamingPassthrough.scala index 45e05fc2..a2259ab1 100644 --- a/generators/chipyard/src/main/scala/example/dsptools/StreamingPassthrough.scala +++ b/generators/chipyard/src/main/scala/example/dsptools/StreamingPassthrough.scala @@ -131,8 +131,9 @@ class TLStreamingPassthroughChain[T<:Data:Ring](params: StreamingPassthroughPara trait CanHavePeripheryStreamingPassthrough { this: BaseSubsystem => val passthrough = p(StreamingPassthroughKey) match { case Some(params) => { - val streamingPassthroughChain = LazyModule(new TLStreamingPassthroughChain(params, UInt(32.W))) - pbus.coupleTo("streamingPassthrough") { streamingPassthroughChain.mem.get := TLFIFOFixer() := TLFragmenter(pbus.beatBytes, pbus.blockBytes) := _ } + val domain = pbus.generateSynchronousDomain.suggestName("streaming_passthrough_domain") + val streamingPassthroughChain = domain { LazyModule(new TLStreamingPassthroughChain(params, UInt(32.W))) } + pbus.coupleTo("streamingPassthrough") { domain { streamingPassthroughChain.mem.get := TLFIFOFixer() := TLFragmenter(pbus.beatBytes, pbus.blockBytes)} := _ } Some(streamingPassthroughChain) } case None => None diff --git a/generators/chipyard/src/main/scala/harness/HarnessBinders.scala b/generators/chipyard/src/main/scala/harness/HarnessBinders.scala index b670fd74..59d4110d 100644 --- a/generators/chipyard/src/main/scala/harness/HarnessBinders.scala +++ b/generators/chipyard/src/main/scala/harness/HarnessBinders.scala @@ -6,355 +6,313 @@ import chisel3.experimental.{Analog, BaseModule, DataMirror, Direction} import org.chipsalliance.cde.config.{Field, Config, Parameters} import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImpLike} -import freechips.rocketchip.amba.axi4.{AXI4Bundle, AXI4SlaveNode, AXI4MasterNode, AXI4EdgeParameters} -import freechips.rocketchip.devices.debug._ -import freechips.rocketchip.jtag.{JTAGIO} import freechips.rocketchip.system.{SimAXIMem} import freechips.rocketchip.subsystem._ import freechips.rocketchip.util._ - -import sifive.blocks.devices.gpio._ -import sifive.blocks.devices.uart._ -import sifive.blocks.devices.spi._ - +import freechips.rocketchip.jtag.{JTAGIO} +import freechips.rocketchip.devices.debug.{SimJTAG} import barstools.iocell.chisel._ - -import testchipip._ - +import testchipip.dram.{SimDRAM} +import testchipip.tsi.{SimTSI, SerialRAM, TSI, TSIIO} +import testchipip.soc.{TestchipSimDTM} +import testchipip.spi.{SimSPIFlashModel} +import testchipip.uart.{UARTAdapter, UARTToSerial} +import testchipip.serdes._ +import testchipip.iceblk.{SimBlockDevice, BlockDeviceModel} +import testchipip.cosim.{SpikeCosim} +import icenet.{NicLoopback, SimNetwork} import chipyard._ -import chipyard.clocking.{HasChipyardPRCI, ClockWithFreq} -import chipyard.iobinders.{GetSystemParameters, JTAGChipIO} +import chipyard.clocking.{HasChipyardPRCI} +import chipyard.iobinders._ -import tracegen.{TraceGenSystemModuleImp} -import icenet.{CanHavePeripheryIceNIC, SimNetwork, NicLoopback, NICKey, NICIOvonly} - -import scala.reflect.{ClassTag} - -case object HarnessBinders extends Field[HarnessBinderMap](HarnessBinderMapDefault) +case object HarnessBinders extends Field[HarnessBinderFunction]({case _ => }) object ApplyHarnessBinders { - def apply(th: HasHarnessInstantiators, sys: LazyModule, portMap: Map[String, Seq[Data]])(implicit p: Parameters): Unit = { - val pm = portMap.withDefaultValue(Nil) - p(HarnessBinders).foreach { case (s, f) => - f(sys, th, pm(s)) - f(sys.module, th, pm(s)) - } + def apply(th: HasHarnessInstantiators, ports: Seq[Port[_]], chipId: Int)(implicit p: Parameters): Unit = { + ports.foreach(port => p(HarnessBinders)(th, port, chipId)) } } -// The ClassTags here are necessary to overcome issues arising from type erasure -class HarnessBinder[T, S <: HasHarnessInstantiators, U <: Data](composer: ((T, S, Seq[U]) => Unit) => (T, S, Seq[U]) => Unit)(implicit systemTag: ClassTag[T], harnessTag: ClassTag[S], portTag: ClassTag[U]) extends Config((site, here, up) => { - case HarnessBinders => up(HarnessBinders, site) + (systemTag.runtimeClass.toString -> - ((t: Any, th: HasHarnessInstantiators, ports: Seq[Data]) => { - val pts = ports.collect({case p: U => p}) - require (pts.length == ports.length, s"Port type mismatch between IOBinder and HarnessBinder: ${portTag}") - val upfn = up(HarnessBinders, site)(systemTag.runtimeClass.toString) - (th, t) match { - case (th: S, system: T) => composer(upfn)(system, th, pts) - case _ => - } - }) - ) +class HarnessBinder[T <: HasHarnessInstantiators, S <: Port[_]]( + fn: => HarnessBinderFunction +) extends Config((site, here, up) => { + case HarnessBinders => fn orElse up(HarnessBinders) }) -class OverrideHarnessBinder[T, S <: HasHarnessInstantiators, U <: Data](fn: => (T, S, Seq[U]) => Unit) - (implicit tag: ClassTag[T], thtag: ClassTag[S], ptag: ClassTag[U]) - extends HarnessBinder[T, S, U]((upfn: (T, S, Seq[U]) => Unit) => fn) -class ComposeHarnessBinder[T, S <: HasHarnessInstantiators, U <: Data](fn: => (T, S, Seq[U]) => Unit) - (implicit tag: ClassTag[T], thtag: ClassTag[S], ptag: ClassTag[U]) - extends HarnessBinder[T, S, U]((upfn: (T, S, Seq[U]) => Unit) => (t, th, p) => { - upfn(t, th, p) - fn(t, th, p) - }) - - -class WithGPIOTiedOff extends OverrideHarnessBinder({ - (system: HasPeripheryGPIOModuleImp, th: HasHarnessInstantiators, ports: Seq[Analog]) => { - ports.foreach { _ <> AnalogConst(0) } +class WithGPIOTiedOff extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: GPIOPort, chipId: Int) => { + port.io <> AnalogConst(0) } }) // DOC include start: WithUARTAdapter -class WithUARTAdapter extends OverrideHarnessBinder({ - (system: HasPeripheryUARTModuleImp, th: HasHarnessInstantiators, ports: Seq[UARTPortIO]) => { - UARTAdapter.connect(ports)(system.p) +class WithUARTAdapter extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: UARTPort, chipId: Int) => { + val div = (th.getHarnessBinderClockFreqMHz.toDouble * 1000000 / port.io.c.initBaudRate.toDouble).toInt + UARTAdapter.connect(Seq(port.io), div, false) } }) // DOC include end: WithUARTAdapter -class WithSimSPIFlashModel(rdOnly: Boolean = true) extends OverrideHarnessBinder({ - (system: HasPeripherySPIFlashModuleImp, th: HasHarnessInstantiators, ports: Seq[SPIChipIO]) => { - SimSPIFlashModel.connect(ports, th.harnessBinderReset, rdOnly)(system.p) +class WithSimSPIFlashModel(rdOnly: Boolean = true) extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: SPIFlashPort, chipId: Int) => { + val spi_mem = Module(new SimSPIFlashModel(port.params.fSize, port.spiId, rdOnly)).suggestName(s"spi_mem${port.spiId}") + spi_mem.io.sck := port.io.sck + require(port.params.csWidth == 1, "I don't know what to do with your extra CS bits. Fix me please.") + spi_mem.io.cs(0) := port.io.cs(0) + spi_mem.io.dq.zip(port.io.dq).foreach { case (x, y) => x <> y } + spi_mem.io.reset := th.harnessBinderReset } }) -class WithSimBlockDevice extends OverrideHarnessBinder({ - (system: CanHavePeripheryBlockDevice, th: HasHarnessInstantiators, ports: Seq[ClockedIO[BlockDeviceIO]]) => { - implicit val p: Parameters = GetSystemParameters(system) - ports.map { b => SimBlockDevice.connect(b.clock, th.harnessBinderReset.asBool, Some(b.bits)) } +class WithSimBlockDevice extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: BlockDevicePort, chipId: Int) => { + val sim_blkdev = Module(new SimBlockDevice(port.params)) + sim_blkdev.io.bdev <> port.io.bits + sim_blkdev.io.clock := port.io.clock + sim_blkdev.io.reset := th.harnessBinderReset } }) -class WithBlockDeviceModel extends OverrideHarnessBinder({ - (system: CanHavePeripheryBlockDevice, th: HasHarnessInstantiators, ports: Seq[ClockedIO[BlockDeviceIO]]) => { - implicit val p: Parameters = GetSystemParameters(system) - ports.map { b => BlockDeviceModel.connect(Some(b.bits)) } +class WithBlockDeviceModel extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: BlockDevicePort, chipId: Int) => { + val blkdev_model = Module(new BlockDeviceModel(16, port.params)) + blkdev_model.io <> port.io.bits + blkdev_model.clock := port.io.clock + blkdev_model.reset := th.harnessBinderReset } }) -class WithLoopbackNIC extends OverrideHarnessBinder({ - (system: CanHavePeripheryIceNIC, th: HasHarnessInstantiators, ports: Seq[ClockedIO[NICIOvonly]]) => { - implicit val p: Parameters = GetSystemParameters(system) - ports.map { n => NicLoopback.connect(Some(n.bits), p(NICKey)) } +class WithLoopbackNIC extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: NICPort, chipId: Int) => { + withClock(port.io.clock) { NicLoopback.connect(port.io.bits, port.params) } } }) -class WithSimNetwork extends OverrideHarnessBinder({ - (system: CanHavePeripheryIceNIC, th: BaseModule with HasHarnessInstantiators, ports: Seq[ClockedIO[NICIOvonly]]) => { - implicit val p: Parameters = GetSystemParameters(system) - ports.map { n => SimNetwork.connect(Some(n.bits), n.clock, th.harnessBinderReset.asBool) } +class WithSimNetwork extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: NICPort, chipId: Int) => { + withClock(port.io.clock) { SimNetwork.connect(Some(port.io.bits), port.io.clock, th.harnessBinderReset.asBool) } } }) -class WithSimAXIMem extends OverrideHarnessBinder({ - (system: CanHaveMasterAXI4MemPort, th: HasHarnessInstantiators, ports: Seq[ClockedAndResetIO[AXI4Bundle]]) => { - val p: Parameters = chipyard.iobinders.GetSystemParameters(system) - (ports zip system.memAXI4Node.edges.in).map { case (port, edge) => - val mem = LazyModule(new SimAXIMem(edge, size=p(ExtMem).get.master.size)(p)) - Module(mem.module).suggestName("mem") - mem.io_axi4.head <> port.bits +class WithSimAXIMem extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: AXI4MemPort, chipId: Int) => { + val mem = LazyModule(new SimAXIMem(port.edge, size=port.params.master.size)(Parameters.empty)) + withClock(port.io.clock) { Module(mem.module) } + mem.io_axi4.head <> port.io.bits + } +}) + +class WithBlackBoxSimMem(additionalLatency: Int = 0) extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: AXI4MemPort, chipId: Int) => { + // TODO FIX: This currently makes each SimDRAM contain the entire memory space + val memSize = port.params.master.size + val memBase = port.params.master.base + val lineSize = 64 // cache block size + val clockFreq = port.clockFreqMHz + val mem = Module(new SimDRAM(memSize, lineSize, clockFreq, memBase, port.edge.bundle, chipId)).suggestName("simdram") + + mem.io.clock := port.io.clock + mem.io.reset := th.harnessBinderReset.asAsyncReset + mem.io.axi <> port.io.bits + // Bug in Chisel implementation. See https://github.com/chipsalliance/chisel3/pull/1781 + def Decoupled[T <: Data](irr: IrrevocableIO[T]): DecoupledIO[T] = { + require(DataMirror.directionOf(irr.bits) == Direction.Output, "Only safe to cast produced Irrevocable bits to Decoupled.") + val d = Wire(new DecoupledIO(chiselTypeOf(irr.bits))) + d.bits := irr.bits + d.valid := irr.valid + irr.ready := d.ready + d + } + if (additionalLatency > 0) { + withClock (port.io.clock) { + mem.io.axi.aw <> (0 until additionalLatency).foldLeft(Decoupled(port.io.bits.aw))((t, _) => Queue(t, 1, pipe=true)) + mem.io.axi.w <> (0 until additionalLatency).foldLeft(Decoupled(port.io.bits.w ))((t, _) => Queue(t, 1, pipe=true)) + port.io.bits.b <> (0 until additionalLatency).foldLeft(Decoupled(mem.io.axi.b ))((t, _) => Queue(t, 1, pipe=true)) + mem.io.axi.ar <> (0 until additionalLatency).foldLeft(Decoupled(port.io.bits.ar))((t, _) => Queue(t, 1, pipe=true)) + port.io.bits.r <> (0 until additionalLatency).foldLeft(Decoupled(mem.io.axi.r ))((t, _) => Queue(t, 1, pipe=true)) + } } } }) -class WithBlackBoxSimMem(additionalLatency: Int = 0) extends OverrideHarnessBinder({ - (system: CanHaveMasterAXI4MemPort, th: HasHarnessInstantiators, ports: Seq[ClockedAndResetIO[AXI4Bundle]]) => { - val p: Parameters = chipyard.iobinders.GetSystemParameters(system) - (ports zip system.memAXI4Node.edges.in).map { case (port, edge) => - // TODO FIX: This currently makes each SimDRAM contain the entire memory space - val memSize = p(ExtMem).get.master.size - val memBase = p(ExtMem).get.master.base - val lineSize = p(CacheBlockBytes) - val clockFreq = p(MemoryBusKey).dtsFrequency.get - val mem = Module(new SimDRAM(memSize, lineSize, clockFreq, memBase, edge.bundle)).suggestName("simdram") - mem.io.axi <> port.bits - // Bug in Chisel implementation. See https://github.com/chipsalliance/chisel3/pull/1781 - def Decoupled[T <: Data](irr: IrrevocableIO[T]): DecoupledIO[T] = { - require(DataMirror.directionOf(irr.bits) == Direction.Output, "Only safe to cast produced Irrevocable bits to Decoupled.") - val d = Wire(new DecoupledIO(chiselTypeOf(irr.bits))) - d.bits := irr.bits - d.valid := irr.valid - irr.ready := d.ready - d +class WithSimAXIMMIO extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: AXI4MMIOPort, chipId: Int) => { + val mmio_mem = LazyModule(new SimAXIMem(port.edge, size = port.params.size)(Parameters.empty)) + withClock(port.io.clock) { Module(mmio_mem.module).suggestName("mmio_mem") } + mmio_mem.io_axi4.head <> port.io.bits + } +}) + +class WithTieOffInterrupts extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: ExtIntPort, chipId: Int) => { + port.io := 0.U + } +}) + +class WithTieOffL2FBusAXI extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: AXI4InPort, chipId: Int) => { + port.io := DontCare + port.io.bits.aw.valid := false.B + port.io.bits.w.valid := false.B + port.io.bits.b.ready := false.B + port.io.bits.ar.valid := false.B + port.io.bits.r.ready := false.B + } +}) + +class WithSimJTAGDebug extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: JTAGPort, chipId: Int) => { + val dtm_success = WireInit(false.B) + when (dtm_success) { th.success := true.B } + val jtag_wire = Wire(new JTAGIO) + jtag_wire.TDO.data := port.io.TDO + jtag_wire.TDO.driven := true.B + port.io.TCK := jtag_wire.TCK + port.io.TMS := jtag_wire.TMS + port.io.TDI := jtag_wire.TDI + val jtag = Module(new SimJTAG(tickDelay=3)) + jtag.connect(jtag_wire, th.harnessBinderClock, th.harnessBinderReset.asBool, ~(th.harnessBinderReset.asBool), dtm_success) + } +}) + +class WithSimDMI extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: DMIPort, chipId: Int) => { + val dtm_success = WireInit(false.B) + when (dtm_success) { th.success := true.B } + val dtm = Module(new TestchipSimDTM()(Parameters.empty)).connect(th.harnessBinderClock, th.harnessBinderReset.asBool, port.io, dtm_success) + } +}) + +class WithTiedOffJTAG extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: JTAGPort, chipId: Int) => { + port.io.TCK := true.B.asClock + port.io.TMS := true.B + port.io.TDI := true.B + } +}) + +class WithTiedOffDMI extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: DMIPort, chipId: Int) => { + port.io.dmi.req.valid := false.B + port.io.dmi.req.bits := DontCare + port.io.dmi.resp.ready := true.B + port.io.dmiClock := false.B.asClock + port.io.dmiReset := true.B + } +}) + +// If tieoffs is specified, a list of serial portIds to tie off +// If tieoffs is unspecified, ties off all serial ports +class WithSerialTLTiedOff(tieoffs: Option[Seq[Int]] = None) extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: SerialTLPort, chipId: Int) if (tieoffs.map(_.contains(port.portId)).getOrElse(true)) => { + port.io match { + case io: DecoupledSerialIO => io.out.ready := false.B; io.in.valid := false.B; io.in.bits := DontCare; + case io: SourceSyncSerialIO => { + io.clock_in := false.B.asClock + io.reset_in := false.B.asAsyncReset + io.in := DontCare + io.credit_in := DontCare } - if (additionalLatency > 0) { - withClockAndReset (port.clock, port.reset) { - mem.io.axi.aw <> (0 until additionalLatency).foldLeft(Decoupled(port.bits.aw))((t, _) => Queue(t, 1, pipe=true)) - mem.io.axi.w <> (0 until additionalLatency).foldLeft(Decoupled(port.bits.w ))((t, _) => Queue(t, 1, pipe=true)) - port.bits.b <> (0 until additionalLatency).foldLeft(Decoupled(mem.io.axi.b))((t, _) => Queue(t, 1, pipe=true)) - mem.io.axi.ar <> (0 until additionalLatency).foldLeft(Decoupled(port.bits.ar))((t, _) => Queue(t, 1, pipe=true)) - port.bits.r <> (0 until additionalLatency).foldLeft(Decoupled(mem.io.axi.r))((t, _) => Queue(t, 1, pipe=true)) + } + port.io match { + case io: InternalSyncSerialIO => + case io: ExternalSyncSerialIO => io.clock_in := false.B.asClock + case _ => + } + } +}) + +class WithSimTSIOverSerialTL extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: SerialTLPort, chipId: Int) if (port.portId == 0) => { + port.io match { + case io: InternalSyncSerialIO => + case io: ExternalSyncSerialIO => io.clock_in := th.harnessBinderClock + } + + port.io match { + case io: DecoupledSerialIO => { + // If the port is locally synchronous (provides a clock), drive everything with that clock + // Else, drive everything with the harnes clock + val clock = port.io match { + case io: InternalSyncSerialIO => io.clock_out + case io: ExternalSyncSerialIO => th.harnessBinderClock + } + withClock(clock) { + val ram = Module(LazyModule(new SerialRAM(port.serdesser, port.params)(port.serdesser.p)).module) + ram.io.ser.in <> io.out + io.in <> ram.io.ser.out + + val success = SimTSI.connect(ram.io.tsi, clock, th.harnessBinderReset, chipId) + when (success) { th.success := true.B } } } - mem.io.clock := port.clock - mem.io.reset := port.reset } } }) -class WithSimAXIMMIO extends OverrideHarnessBinder({ - (system: CanHaveMasterAXI4MMIOPort, th: HasHarnessInstantiators, ports: Seq[ClockedAndResetIO[AXI4Bundle]]) => { - val p: Parameters = chipyard.iobinders.GetSystemParameters(system) - (ports zip system.mmioAXI4Node.edges.in).map { case (port, edge) => - val mmio_mem = LazyModule(new SimAXIMem(edge, size = p(ExtBus).get.size)(p)) - withClockAndReset(port.clock, port.reset) { - Module(mmio_mem.module).suggestName("mmio_mem") - } - mmio_mem.io_axi4.head <> port.bits - } +class WithDriveChipIdPin extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: ChipIdPort, chipId: Int) => { + require(chipId < math.pow(2, port.io.getWidth), "ID Pin is not wide enough") + port.io := chipId.U } }) -class WithTieOffInterrupts extends OverrideHarnessBinder({ - (system: HasExtInterruptsModuleImp, th: HasHarnessInstantiators, ports: Seq[UInt]) => { - ports.foreach { _ := 0.U } +class WithSimUARTToUARTTSI extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: UARTPort, chipId: Int) => { + UARTAdapter.connect(Seq(port.io), + baudrate=port.io.c.initBaudRate, + clockFrequency=th.getHarnessBinderClockFreqHz.toInt, + forcePty=true) } }) -class WithTieOffL2FBusAXI extends OverrideHarnessBinder({ - (system: CanHaveSlaveAXI4Port, th: HasHarnessInstantiators, ports: Seq[ClockedIO[AXI4Bundle]]) => { - ports.foreach({ p => - p.bits := DontCare - p.bits.aw.valid := false.B - p.bits.w.valid := false.B - p.bits.b.ready := false.B - p.bits.ar.valid := false.B - p.bits.r.ready := false.B - }) +class WithSimTSIToUARTTSI extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: UARTTSIPort, chipId: Int) => { + val freq = th.getHarnessBinderClockFreqHz.toInt + val uart_to_serial = Module(new UARTToSerial(freq, port.io.uart.c)) + val serial_width_adapter = Module(new SerialWidthAdapter(8, TSI.WIDTH)) + val success = SimTSI.connect(Some(TSIIO(serial_width_adapter.io.wide)), th.harnessBinderClock, th.harnessBinderReset) + when (success) { th.success := true.B } + assert(!uart_to_serial.io.dropped) + serial_width_adapter.io.narrow.flipConnect(uart_to_serial.io.serial) + uart_to_serial.io.uart.rxd := port.io.uart.txd + port.io.uart.rxd := uart_to_serial.io.uart.txd } }) -class WithSimDebug extends OverrideHarnessBinder({ - (system: HasPeripheryDebug, th: HasHarnessInstantiators, ports: Seq[Data]) => { - implicit val p: Parameters = GetSystemParameters(system) - ports.map { - case d: ClockedDMIIO => - val dtm_success = WireInit(false.B) - when (dtm_success) { th.success := true.B } - val dtm = Module(new TestchipSimDTM).connect(th.harnessBinderClock, th.harnessBinderReset.asBool, d, dtm_success) - case j: JTAGChipIO => - val dtm_success = WireInit(false.B) - when (dtm_success) { th.success := true.B } - val jtag_wire = Wire(new JTAGIO) - jtag_wire.TDO.data := j.TDO - jtag_wire.TDO.driven := true.B - j.TCK := jtag_wire.TCK - j.TMS := jtag_wire.TMS - j.TDI := jtag_wire.TDI - val jtag = Module(new SimJTAG(tickDelay=3)) - jtag.connect(jtag_wire, th.harnessBinderClock, th.harnessBinderReset.asBool, ~(th.harnessBinderReset.asBool), dtm_success) - } +class WithTraceGenSuccess extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: SuccessPort, chipId: Int) => { + when (port.io) { th.success := true.B } } }) -class WithTiedOffDebug extends OverrideHarnessBinder({ - (system: HasPeripheryDebug, th: HasHarnessInstantiators, ports: Seq[Data]) => { - ports.map { - case j: JTAGChipIO => - j.TCK := true.B.asClock - j.TMS := true.B - j.TDI := true.B - case d: ClockedDMIIO => - d.dmi.req.valid := false.B - d.dmi.req.bits := DontCare - d.dmi.resp.ready := true.B - d.dmiClock := false.B.asClock - d.dmiReset := true.B - case a: ClockedAPBBundle => - a.pready := false.B - a.pslverr := false.B - a.prdata := 0.U - a.pduser := DontCare - a.clock := false.B.asClock - a.reset := true.B.asAsyncReset - a.psel := false.B - a.penable := false.B - } +class WithCospike extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: TracePort, chipId: Int) => { + port.io.traces.zipWithIndex.map(t => SpikeCosim(t._1, t._2, port.cosimCfg)) } }) -class WithSerialTLTiedOff extends OverrideHarnessBinder({ - (system: CanHavePeripheryTLSerial, th: HasHarnessInstantiators, ports: Seq[ClockedIO[SerialIO]]) => { - implicit val p = chipyard.iobinders.GetSystemParameters(system) - ports.map({ port => - val bits = port.bits - if (DataMirror.directionOf(port.clock) == Direction.Input) { - port.clock := false.B.asClock - } - port.bits.out.ready := false.B - port.bits.in.valid := false.B - port.bits.in.bits := DontCare - }) - } -}) - -class WithSimTSIOverSerialTL extends OverrideHarnessBinder({ - (system: CanHavePeripheryTLSerial, th: HasHarnessInstantiators, ports: Seq[ClockedIO[SerialIO]]) => { - implicit val p = chipyard.iobinders.GetSystemParameters(system) - ports.map({ port => - val bits = port.bits - if (DataMirror.directionOf(port.clock) == Direction.Input) { - port.clock := th.harnessBinderClock - } - val ram = TSIHarness.connectRAM(system.serdesser.get, bits, th.harnessBinderReset) - val success = SimTSI.connect(Some(ram.module.io.tsi), th.harnessBinderClock, th.harnessBinderReset.asBool) - when (success) { th.success := true.B } - }) - } -}) - -class WithSimUARTToUARTTSI extends OverrideHarnessBinder({ - (system: CanHavePeripheryUARTTSI, th: HasHarnessInstantiators, ports: Seq[UARTTSIIO]) => { - implicit val p = chipyard.iobinders.GetSystemParameters(system) - require(ports.size <= 1) - ports.map { port => { - UARTAdapter.connect(Seq(port.uart), - baudrate=port.uartParams.initBaudRate, - clockFrequency=th.getHarnessBinderClockFreqHz.toInt, - forcePty=true) - assert(!port.dropped) - }} - } -}) - -class WithSimTSIToUARTTSI extends OverrideHarnessBinder({ - (system: CanHavePeripheryUARTTSI, th: HasHarnessInstantiators, ports: Seq[UARTTSIIO]) => { - implicit val p = chipyard.iobinders.GetSystemParameters(system) - require(ports.size <= 1) - ports.map({ port => - val freq = th.getHarnessBinderClockFreqHz.toInt - val uart_to_serial = Module(new UARTToSerial(freq, port.uartParams)) - val serial_width_adapter = Module(new SerialWidthAdapter(8, TSI.WIDTH)) - val success = SimTSI.connect(Some(TSIIO(serial_width_adapter.io.wide)), th.harnessBinderClock, th.harnessBinderReset) - when (success) { th.success := true.B } - assert(!uart_to_serial.io.dropped) - serial_width_adapter.io.narrow.flipConnect(uart_to_serial.io.serial) - uart_to_serial.io.uart.rxd := port.uart.txd - port.uart.rxd := uart_to_serial.io.uart.txd - }) - } -}) - - -class WithTraceGenSuccess extends OverrideHarnessBinder({ - (system: TraceGenSystemModuleImp, th: HasHarnessInstantiators, ports: Seq[Bool]) => { - ports.map { p => when (p) { th.success := true.B } } - } -}) - -class WithCospike extends ComposeHarnessBinder({ - (system: CanHaveTraceIOModuleImp, th: HasHarnessInstantiators, ports: Seq[TraceOutputTop]) => { - implicit val p = chipyard.iobinders.GetSystemParameters(system) - val chipyardSystem = system.asInstanceOf[ChipyardSystemModule[_]].outer.asInstanceOf[ChipyardSystem] - val tiles = chipyardSystem.tiles - val cfg = SpikeCosimConfig( - isa = tiles.headOption.map(_.isaDTS).getOrElse(""), - vlen = tiles.headOption.map(_.tileParams.core.vLen).getOrElse(0), - priv = tiles.headOption.map(t => if (t.usingUser) "MSU" else if (t.usingSupervisor) "MS" else "M").getOrElse(""), - mem0_base = p(ExtMem).map(_.master.base).getOrElse(BigInt(0)), - mem0_size = p(ExtMem).map(_.master.size).getOrElse(BigInt(0)), - pmpregions = tiles.headOption.map(_.tileParams.core.nPMPs).getOrElse(0), - nharts = tiles.size, - bootrom = chipyardSystem.bootROM.map(_.module.contents.toArray.mkString(" ")).getOrElse(""), - has_dtm = p(ExportDebug).protocols.contains(DMI) // assume that exposing clockeddmi means we will connect SimDTM - ) - ports.map { p => p.traces.zipWithIndex.map(t => SpikeCosim(t._1, t._2, cfg)) } - } -}) - - -class WithCustomBootPinPlusArg extends OverrideHarnessBinder({ - (system: CanHavePeripheryCustomBootPin, th: HasHarnessInstantiators, ports: Seq[Bool]) => { +class WithCustomBootPinPlusArg extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: CustomBootPort, chipId: Int) => { val pin = PlusArg("custom_boot_pin", width=1) - ports.foreach(_ := pin) + port.io := pin } }) - -class WithClockAndResetFromHarness extends OverrideHarnessBinder({ - (system: HasChipyardPRCI, th: HasHarnessInstantiators, ports: Seq[Data]) => { - implicit val p = GetSystemParameters(system) - val clocks = ports.collect { case c: ClockWithFreq => c } +class WithClockFromHarness extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: ClockPort, chipId: Int) => { // DOC include start: HarnessClockInstantiatorEx - ports.map ({ - case c: ClockWithFreq => { - val clock = th.harnessClockInstantiator.requestClockMHz(s"clock_${c.freqMHz.toInt}MHz", c.freqMHz) - c.clock := clock - } - case r: AsyncReset => r := th.referenceReset.asAsyncReset - }) + port.io := th.harnessClockInstantiator.requestClockMHz(s"clock_${port.freqMHz}MHz", port.freqMHz) // DOC include end: HarnessClockInstantiatorEx } }) + +class WithResetFromHarness extends HarnessBinder({ + case (th: HasHarnessInstantiators, port: ResetPort, chipId: Int) => { + port.io := th.referenceReset.asAsyncReset + } +}) + diff --git a/generators/chipyard/src/main/scala/harness/HarnessClocks.scala b/generators/chipyard/src/main/scala/harness/HarnessClocks.scala index 0f58f33b..cfc1cad4 100644 --- a/generators/chipyard/src/main/scala/harness/HarnessClocks.scala +++ b/generators/chipyard/src/main/scala/harness/HarnessClocks.scala @@ -10,7 +10,6 @@ import freechips.rocketchip.util.{ResetCatchAndSync} import freechips.rocketchip.prci._ import chipyard.harness.{ApplyHarnessBinders, HarnessBinders, HarnessClockInstantiatorKey} -import chipyard.iobinders.HasIOBinders import chipyard.clocking.{SimplePllConfiguration, ClockDividerN} diff --git a/generators/chipyard/src/main/scala/harness/HasHarnessInstantiators.scala b/generators/chipyard/src/main/scala/harness/HasHarnessInstantiators.scala index e79b6c4e..b8674623 100644 --- a/generators/chipyard/src/main/scala/harness/HasHarnessInstantiators.scala +++ b/generators/chipyard/src/main/scala/harness/HasHarnessInstantiators.scala @@ -5,12 +5,12 @@ import chisel3._ import scala.collection.mutable.{ArrayBuffer, LinkedHashMap} import freechips.rocketchip.diplomacy.{LazyModule} import org.chipsalliance.cde.config.{Field, Parameters, Config} -import freechips.rocketchip.util.{ResetCatchAndSync} +import freechips.rocketchip.util.{ResetCatchAndSync, DontTouch} import freechips.rocketchip.prci.{ClockBundle, ClockBundleParameters, ClockSinkParameters, ClockParameters} import chipyard.stage.phases.TargetDirKey import chipyard.harness.{ApplyHarnessBinders, HarnessBinders} -import chipyard.iobinders.HasIOBinders +import chipyard.iobinders.HasChipyardPorts import chipyard.clocking.{SimplePllConfiguration, ClockDividerN} import chipyard.{ChipTop} @@ -24,6 +24,7 @@ case object BuildTop extends Field[Parameters => LazyModule]((p: Parameters) => case object HarnessClockInstantiatorKey extends Field[() => HarnessClockInstantiator]() case object HarnessBinderClockFrequencyKey extends Field[Double](100.0) // MHz case object MultiChipIdx extends Field[Int](0) +case object DontTouchChipTopPorts extends Field[Boolean](true) class WithMultiChip(id: Int, p: Parameters) extends Config((site, here, up) => { case MultiChipParameters(`id`) => p @@ -39,6 +40,10 @@ class WithHarnessBinderClockFreqMHz(freqMHz: Double) extends Config((site, here, case HarnessBinderClockFrequencyKey => freqMHz }) +class WithDontTouchChipTopPorts(b: Boolean = true) extends Config((site, here, up) => { + case DontTouchChipTopPorts => b +}) + // A TestHarness mixing this in will // - use the HarnessClockInstantiator clock provide trait HasHarnessInstantiators { @@ -63,7 +68,7 @@ trait HasHarnessInstantiators { val supportsMultiChip: Boolean = false - private val chipParameters = p(MultiChipNChips) match { + val chipParameters = p(MultiChipNChips) match { case Some(n) => (0 until n).map { i => p(MultiChipParameters(i)).alterPartial { case TargetDirKey => p(TargetDirKey) // hacky fix case MultiChipIdx => i @@ -83,12 +88,20 @@ trait HasHarnessInstantiators { withClockAndReset (harnessBinderClock, harnessBinderReset) { lazyDuts.zipWithIndex.foreach { - case (d: HasIOBinders, i: Int) => ApplyHarnessBinders(this, d.lazySystem, d.portMap)(chipParameters(i)) + case (d: HasChipyardPorts, i: Int) => { + ApplyHarnessBinders(this, d.ports, i)(chipParameters(i)) + } case _ => } ApplyMultiHarnessBinders(this, lazyDuts) } + if (p(DontTouchChipTopPorts)) { + duts.map(_ match { + case d: DontTouch => d.dontTouchPorts() + }) + } + val harnessBinderClk = harnessClockInstantiator.requestClockMHz("harnessbinder_clock", getHarnessBinderClockFreqMHz) println(s"Harness binder clock is $harnessBinderClockFreq") harnessBinderClock := harnessBinderClk diff --git a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala index 1c057dff..4f32880e 100644 --- a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala +++ b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala @@ -2,6 +2,7 @@ package chipyard.harness import chisel3._ import chisel3.util._ +import chisel3.experimental.{DataMirror, Direction} import org.chipsalliance.cde.config.{Field, Config, Parameters} import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImpLike} @@ -9,70 +10,75 @@ import freechips.rocketchip.devices.debug._ import freechips.rocketchip.subsystem._ import freechips.rocketchip.util._ -import testchipip._ +import testchipip.serdes._ import chipyard._ -import chipyard.clocking.{HasChipyardPRCI, ClockWithFreq} -import chipyard.iobinders.{GetSystemParameters, JTAGChipIO, HasIOBinders} +import chipyard.iobinders.{GetSystemParameters, JTAGChipIO, HasChipyardPorts, Port, SerialTLPort} import scala.reflect.{ClassTag} -case class MultiHarnessBinders(c0: Int, c1: Int) extends Field[MultiHarnessBinderMap](MultiHarnessBinderMapDefault) - -class MultiHarnessBinder[T0, T1, S <: HasHarnessInstantiators, U0 <: Data, U1 <: Data] - (chip0: Int, chip1: Int, fn: => (T0, T1, S, Seq[U0], Seq[U1]) => Unit) - (implicit tag0: ClassTag[T0], tag1: ClassTag[T1], thtag: ClassTag[S], ptag0: ClassTag[U0], ptag1: ClassTag[U1]) - extends Config((site, here, up) => { - // Override any HarnessBinders for chip0/chip1 - case MultiChipParameters(`chip0`) => new Config( - new OverrideHarnessBinder[T0, S, U0]((system: T0, th: S, ports: Seq[U0]) => Nil) ++ - up(MultiChipParameters(chip0)) - ) - case MultiChipParameters(`chip1`) => new Config( - new OverrideHarnessBinder[T1, S, U1]((system: T1, th: S, ports: Seq[U1]) => Nil) ++ - up(MultiChipParameters(chip1)) - ) - // Set the multiharnessbinder key - case MultiHarnessBinders(`chip0`, `chip1`) => up(MultiHarnessBinders(chip0, chip1)) + - ((tag0.runtimeClass.toString, tag1.runtimeClass.toString) -> - ((c0: Any, c1: Any, th: HasHarnessInstantiators, ports0: Seq[Data], ports1: Seq[Data]) => { - val pts0 = ports0.map(_.asInstanceOf[U0]) - val pts1 = ports1.map(_.asInstanceOf[U1]) - require(pts0.size == pts1.size) - (c0, c1, th) match { - case (c0: T0, c1: T1, th: S) => fn(c0, c1, th, pts0, pts1) - case _ => - } - }) - ) - }) +case class MultiHarnessBinders(chip0: Int, chip1: Int) extends Field[Seq[MultiHarnessBinderFunction]](Nil) object ApplyMultiHarnessBinders { def apply(th: HasHarnessInstantiators, chips: Seq[LazyModule])(implicit p: Parameters): Unit = { Seq.tabulate(chips.size, chips.size) { case (i, j) => if (i != j) { (chips(i), chips(j)) match { - case (l0: HasIOBinders, l1: HasIOBinders) => p(MultiHarnessBinders(i, j)).foreach { - case ((s0, s1), f) => { - f(l0.lazySystem , l1.lazySystem , th, l0.portMap(s0), l1.portMap(s1)) - f(l0.lazySystem.module, l1.lazySystem.module, th, l0.portMap(s0), l1.portMap(s1)) - } + case (l0: HasChipyardPorts, l1: HasChipyardPorts) => p(MultiHarnessBinders(i, j)).foreach { f => + f(th, l0.ports, l1.ports) } - case _ => } }} } } -class WithMultiChipSerialTL(chip0: Int, chip1: Int) extends MultiHarnessBinder(chip0, chip1, ( - (system0: CanHavePeripheryTLSerial, system1: CanHavePeripheryTLSerial, - th: HasHarnessInstantiators, - ports0: Seq[ClockedIO[SerialIO]], ports1: Seq[ClockedIO[SerialIO]] - ) => { - require(ports0.size == ports1.size) - (ports0 zip ports1).map { case (l, r) => - l.clock <> r.clock - require(l.bits.w == r.bits.w) - l.bits.flipConnect(r.bits) +class MultiHarnessBinder[T <: Port[_], S <: HasHarnessInstantiators]( + chip0: Int, chip1: Int, + chip0portFn: T => Boolean, chip1portFn: T => Boolean, + connectFn: (S, T, T) => Unit +)(implicit tag0: ClassTag[T], tag1: ClassTag[S]) extends Config((site, here, up) => { + // Override any HarnessBinders for chip0/chip1 + case MultiChipParameters(`chip0`) => new Config( + new HarnessBinder({case (th: S, port: T, chipId: Int) if chip0portFn(port) => }) ++ up(MultiChipParameters(chip0)) + ) + case MultiChipParameters(`chip1`) => new Config( + new HarnessBinder({case (th: S, port: T, chipId: Int) if chip1portFn(port) => }) ++ up(MultiChipParameters(chip1)) + ) + // Set the multiharnessbinder key + case MultiHarnessBinders(`chip0`, `chip1`) => up(MultiHarnessBinders(chip0, chip1)) :+ { + ((th: S, chip0Ports: Seq[Port[_]], chip1Ports: Seq[Port[_]]) => { + val chip0Port: Seq[T] = chip0Ports.collect { case (p: T) if chip0portFn(p) => p } + val chip1Port: Seq[T] = chip1Ports.collect { case (p: T) if chip1portFn(p) => p } + require(chip0Port.size == 1 && chip1Port.size == 1) + connectFn(th, chip0Port(0), chip1Port(0)) + }) + } + }) + + +class WithMultiChipSerialTL(chip0: Int, chip1: Int, chip0portId: Int = 0, chip1portId: Int = 0) extends MultiHarnessBinder( + chip0, chip1, + (p0: SerialTLPort) => p0.portId == chip0portId, + (p1: SerialTLPort) => p1.portId == chip1portId, + (th: HasHarnessInstantiators, p0: SerialTLPort, p1: SerialTLPort) => { + def connectDecoupledSyncSerialIO(clkSource: InternalSyncSerialIO, clkSink: ExternalSyncSerialIO) = { + clkSink.clock_in := clkSource.clock_out + clkSink.in <> clkSource.out + clkSource.in <> clkSink.out + } + def connectSourceSyncSerialIO(a: SourceSyncSerialIO, b: SourceSyncSerialIO) = { + a.clock_in := b.clock_out + b.clock_in := a.clock_out + a.reset_in := b.reset_out + b.reset_in := a.reset_out + a.in := b.out + b.in := a.out + a.credit_in := b.credit_out + b.credit_in := a.credit_out + } + (p0.io, p1.io) match { + case (io0: InternalSyncSerialIO, io1: ExternalSyncSerialIO) => connectDecoupledSyncSerialIO(io0, io1) + case (io0: ExternalSyncSerialIO, io1: InternalSyncSerialIO) => connectDecoupledSyncSerialIO(io1, io0) + case (io0: SourceSyncSerialIO , io1: SourceSyncSerialIO ) => connectSourceSyncSerialIO (io0, io1) } } -)) +) diff --git a/generators/chipyard/src/main/scala/harness/TestHarness.scala b/generators/chipyard/src/main/scala/harness/TestHarness.scala index 459c6511..43bf2dd0 100644 --- a/generators/chipyard/src/main/scala/harness/TestHarness.scala +++ b/generators/chipyard/src/main/scala/harness/TestHarness.scala @@ -9,7 +9,6 @@ import freechips.rocketchip.util.{ResetCatchAndSync} import freechips.rocketchip.prci.{ClockBundle, ClockBundleParameters, ClockSinkParameters, ClockParameters} import chipyard.harness.{ApplyHarnessBinders, HarnessBinders} -import chipyard.iobinders.HasIOBinders import chipyard.clocking.{SimplePllConfiguration, ClockDividerN} import chipyard.{ChipTop} diff --git a/generators/chipyard/src/main/scala/harness/package.scala b/generators/chipyard/src/main/scala/harness/package.scala index 789d1595..d49c1119 100644 --- a/generators/chipyard/src/main/scala/harness/package.scala +++ b/generators/chipyard/src/main/scala/harness/package.scala @@ -5,13 +5,7 @@ import scala.collection.immutable.ListMap package object harness { - type HarnessBinderFunction = (Any, HasHarnessInstantiators, Seq[Data]) => Unit - type HarnessBinderMap = Map[String, HarnessBinderFunction] - def HarnessBinderMapDefault: HarnessBinderMap = (new ListMap[String, HarnessBinderFunction]) - .withDefaultValue((t: Any, th: HasHarnessInstantiators, d: Seq[Data]) => ()) - - type MultiHarnessBinderFunction = (Any, Any, HasHarnessInstantiators, Seq[Data], Seq[Data]) => Unit - type MultiHarnessBinderMap = Map[(String, String), MultiHarnessBinderFunction] - def MultiHarnessBinderMapDefault: MultiHarnessBinderMap = (new ListMap[(String, String), MultiHarnessBinderFunction]) - .withDefaultValue((_: Any, _: Any, _: HasHarnessInstantiators, _: Seq[Data], _: Seq[Data]) => ()) + import chipyard.iobinders.Port + type HarnessBinderFunction = PartialFunction[(HasHarnessInstantiators, Port[_], Int), Unit] + type MultiHarnessBinderFunction = (HasHarnessInstantiators, Seq[Port[_]], Seq[Port[_]]) => Unit } diff --git a/generators/chipyard/src/main/scala/IOBinders.scala b/generators/chipyard/src/main/scala/iobinders/IOBinders.scala similarity index 64% rename from generators/chipyard/src/main/scala/IOBinders.scala rename to generators/chipyard/src/main/scala/iobinders/IOBinders.scala index b74d8f0e..64b1296e 100644 --- a/generators/chipyard/src/main/scala/IOBinders.scala +++ b/generators/chipyard/src/main/scala/iobinders/IOBinders.scala @@ -1,7 +1,8 @@ package chipyard.iobinders import chisel3._ -import chisel3.experimental.{Analog, IO, DataMirror} +import chisel3.reflect.DataMirror +import chisel3.experimental.Analog import org.chipsalliance.cde.config._ import freechips.rocketchip.diplomacy._ @@ -18,18 +19,26 @@ import freechips.rocketchip.tilelink.{TLBundle} import sifive.blocks.devices.gpio._ import sifive.blocks.devices.uart._ import sifive.blocks.devices.spi._ +import sifive.blocks.devices.i2c._ import tracegen.{TraceGenSystemModuleImp} import barstools.iocell.chisel._ -import testchipip._ +import testchipip.serdes.{CanHavePeripheryTLSerial, SerialTLKey} +import testchipip.spi.{SPIChipIO} +import testchipip.boot.{CanHavePeripheryCustomBootPin} +import testchipip.soc.{CanHavePeripheryChipIdPin} +import testchipip.util.{ClockedIO} +import testchipip.iceblk.{CanHavePeripheryBlockDevice, BlockDeviceKey, BlockDeviceIO} +import testchipip.cosim.{CanHaveTraceIO, TraceOutputTop, SpikeCosimConfig} +import testchipip.tsi.{CanHavePeripheryUARTTSI, UARTTSIIO} import icenet.{CanHavePeripheryIceNIC, SimNetwork, NicLoopback, NICKey, NICIOvonly} -import chipyard.{CanHaveMasterTLMemPort} +import chipyard.{CanHaveMasterTLMemPort, ChipyardSystem, ChipyardSystemModule} import scala.reflect.{ClassTag} object IOBinderTypes { - type IOBinderTuple = (Seq[Data], Seq[IOCell]) + type IOBinderTuple = (Seq[Port[_]], Seq[IOCell]) type IOBinderFunction = (Boolean, => Any) => ModuleValue[IOBinderTuple] } import IOBinderTypes._ @@ -50,13 +59,7 @@ case object IOBinders extends Field[Map[String, Seq[IOBinderFunction]]]( Map[String, Seq[IOBinderFunction]]().withDefaultValue(Nil) ) -case object DontTouchIOBindersPorts extends Field[Boolean](true) - -class WithDontTouchIOBinders(b: Boolean = true) extends Config((site, here, up) => { - case DontTouchIOBindersPorts => b -}) - -abstract trait HasIOBinders { this: LazyModule => +abstract trait HasIOBinders extends HasChipyardPorts { this: LazyModule => val lazySystem: LazyModule private val iobinders = p(IOBinders) // Note: IOBinders cannot rely on the implicit clock/reset, as they may be called from the @@ -80,11 +83,9 @@ abstract trait HasIOBinders { this: LazyModule => // A mapping between stringified DigitalSystem traits and their corresponding ChipTop iocells val iocellMap = InModuleBody { iobinders.keys.map(k => k -> (lzyFlattened(k)._2 ++ impFlattened(k)._2)).toMap } - InModuleBody { - if (p(DontTouchIOBindersPorts)) { - portMap.values.foreach(_.foreach(dontTouch(_))) - } + def ports = portMap.getWrappedValue.values.flatten.toSeq + InModuleBody { println("IOCells generated by IOBinders:") for ((k, v) <- iocellMap) { if (!v.isEmpty) { @@ -117,7 +118,10 @@ object GetSystemParameters { } class IOBinder[T](composer: Seq[IOBinderFunction] => Seq[IOBinderFunction])(implicit tag: ClassTag[T]) extends Config((site, here, up) => { - case IOBinders => up(IOBinders, site) + (tag.runtimeClass.toString -> composer(up(IOBinders, site)(tag.runtimeClass.toString))) + case IOBinders => { + val upMap = up(IOBinders) + upMap + (tag.runtimeClass.toString -> composer(upMap(tag.runtimeClass.toString))) + } }) class ConcreteIOBinder[T](composes: Boolean, fn: T => IOBinderTuple)(implicit tag: ClassTag[T]) extends IOBinder[T]( @@ -171,29 +175,72 @@ class WithGPIOCells extends OverrideIOBinder({ iocell.io.ie := pin.o.ie pin.i.ival := iocell.io.i iocell.io.pad <> g - (g, iocell) + (GPIOPort(() => g, i, j), iocell) }).unzip }).unzip - val ports: Seq[Analog] = ports2d.flatten - (ports, cells2d.flatten) + (ports2d.flatten, cells2d.flatten) + } +}) + +class WithGPIOPunchthrough extends OverrideIOBinder({ + (system: HasPeripheryGPIOModuleImp) => { + val ports = system.gpio.zipWithIndex.map { case (gpio, i) => + val io_gpio = IO(gpio.cloneType).suggestName(s"gpio_$i") + io_gpio <> gpio + GPIOPinsPort(() => io_gpio, i) + } + (ports, Nil) + } +}) + +class WithI2CPunchthrough extends OverrideIOBinder({ + (system: HasPeripheryI2CModuleImp) => { + val ports = system.i2c.zipWithIndex.map { case (i2c, i) => + val io_i2c = IO(i2c.cloneType).suggestName(s"i2c_$i") + io_i2c <> i2c + I2CPort(() => i2c) + } + (ports, Nil) } }) // DOC include start: WithUARTIOCells class WithUARTIOCells extends OverrideIOBinder({ (system: HasPeripheryUARTModuleImp) => { - val (ports: Seq[UARTPortIO], cells2d) = system.uart.zipWithIndex.map({ case (u, i) => + val (ports: Seq[UARTPort], cells2d) = system.uart.zipWithIndex.map({ case (u, i) => val (port, ios) = IOCell.generateIOFromSignal(u, s"uart_${i}", system.p(IOCellKey), abstractResetAsAsync = true) - (port, ios) + val where = PBUS // TODO fix + val bus = system.outer.asInstanceOf[HasTileLinkLocations].locateTLBusWrapper(where) + val freqMHz = bus.dtsFrequency.get / 1000000 + (UARTPort(() => port, i, freqMHz.toInt), ios) }).unzip (ports, cells2d.flatten) } }) // DOC include end: WithUARTIOCells -class WithSPIIOCells extends OverrideIOBinder({ +class WithSPIIOPunchthrough extends OverrideLazyIOBinder({ + (system: HasPeripherySPI) => { + // attach resource to 1st SPI + if (system.tlSpiNodes.size > 0) ResourceBinding { + Resource(new MMCDevice(system.tlSpiNodes.head.device, 1), "reg").bind(ResourceAddress(0)) + } + InModuleBody { + val spi = system.asInstanceOf[BaseSubsystem].module.asInstanceOf[HasPeripherySPIBundle].spi + val ports = spi.zipWithIndex.map({ case (s, i) => + val io_spi = IO(s.cloneType).suggestName(s"spi_$i") + io_spi <> s + SPIPort(() => io_spi) + }) + (ports, Nil) + } + } +}) + +class WithSPIFlashIOCells extends OverrideIOBinder({ (system: HasPeripherySPIFlashModuleImp) => { - val (ports: Seq[SPIChipIO], cells2d) = system.qspi.zipWithIndex.map({ case (s, i) => + val (ports: Seq[SPIFlashPort], cells2d) = system.qspi.zipWithIndex.map({ case (s, i) => + val name = s"spi_${i}" val port = IO(new SPIChipIO(s.c.csWidth)).suggestName(name) val iocellBase = s"iocell_${name}" @@ -213,7 +260,7 @@ class WithSPIIOCells extends OverrideIOBinder({ iocell } - (port, dqIOs ++ csIOs ++ sckIOs) + (SPIFlashPort(() => port, system.p(PeripherySPIFlashKey)(i), i), dqIOs ++ csIOs ++ sckIOs) }).unzip (ports, cells2d.flatten) } @@ -223,7 +270,7 @@ class WithExtInterruptIOCells extends OverrideIOBinder({ (system: HasExtInterruptsModuleImp) => { if (system.outer.nExtInterrupts > 0) { val (port: UInt, cells) = IOCell.generateIOFromSignal(system.interrupts, "ext_interrupts", system.p(IOCellKey), abstractResetAsAsync = true) - (Seq(port), cells) + (Seq(ExtIntPort(() => port)), cells) } else { system.interrupts := DontCare // why do I have to drive this 0-wide wire??? (Nil, Nil) @@ -239,7 +286,9 @@ class JTAGChipIO extends Bundle { val TDO = Output(Bool()) } -class WithDebugIOCells extends OverrideLazyIOBinder({ +// WARNING: Don't disable syncReset unless you are trying to +// get around bugs in RTL simulators +class WithDebugIOCells(syncReset: Boolean = true) extends OverrideLazyIOBinder({ (system: HasPeripheryDebug) => { implicit val p = GetSystemParameters(system) val tlbus = system.asInstanceOf[BaseSubsystem].locateTLBusWrapper(p(ExportDebug).slaveWhere) @@ -263,7 +312,7 @@ class WithDebugIOCells extends OverrideLazyIOBinder({ d.disableDebug.foreach { d => d := false.B } // Drive JTAG on-chip IOs d.systemjtag.map { j => - j.reset := ResetCatchAndSync(j.jtag.TCK, clockBundle.reset.asBool) + j.reset := (if (syncReset) ResetCatchAndSync(j.jtag.TCK, clockBundle.reset.asBool) else clockBundle.reset.asBool) j.mfr_id := p(JtagDTMKey).idcodeManufId.U(11.W) j.part_number := p(JtagDTMKey).idcodePartNum.U(16.W) j.version := p(JtagDTMKey).idcodeVersion.U(4.W) @@ -273,7 +322,8 @@ class WithDebugIOCells extends OverrideLazyIOBinder({ // Add IOCells for the DMI/JTAG/APB ports val dmiTuple = debug.clockeddmi.map { d => - IOCell.generateIOFromSignal(d, "dmi", p(IOCellKey), abstractResetAsAsync = true) + val (port, cells) = IOCell.generateIOFromSignal(d, "dmi", p(IOCellKey), abstractResetAsAsync = true) + (DMIPort(() => port), cells) } val jtagTuple = debug.systemjtag.map { j => @@ -282,14 +332,13 @@ class WithDebugIOCells extends OverrideLazyIOBinder({ j.jtag.TMS := jtag_wire.TMS j.jtag.TDI := jtag_wire.TDI jtag_wire.TDO := j.jtag.TDO.data - IOCell.generateIOFromSignal(jtag_wire, "jtag", p(IOCellKey), abstractResetAsAsync = true) + val (port, cells) = IOCell.generateIOFromSignal(jtag_wire, "jtag", p(IOCellKey), abstractResetAsAsync = true) + (JTAGPort(() => port), cells) } - val apbTuple = debug.apb.map { a => - IOCell.generateIOFromSignal(a, "apb", p(IOCellKey), abstractResetAsAsync = true) - } + require(!debug.apb.isDefined) - val allTuples = (dmiTuple ++ jtagTuple ++ apbTuple).toSeq + val allTuples = (dmiTuple ++ jtagTuple).toSeq (allTuples.map(_._1).toSeq, allTuples.flatMap(_._2).toSeq) }).getOrElse((Nil, Nil)) }}} @@ -297,20 +346,34 @@ class WithDebugIOCells extends OverrideLazyIOBinder({ }) class WithSerialTLIOCells extends OverrideIOBinder({ - (system: CanHavePeripheryTLSerial) => system.serial_tl.map({ s => + (system: CanHavePeripheryTLSerial) => { + val (ports, cells) = system.serial_tls.zipWithIndex.map({ case (s, id) => + val sys = system.asInstanceOf[BaseSubsystem] + val (port, cells) = IOCell.generateIOFromSignal(s.getWrappedValue, s"serial_tl_$id", sys.p(IOCellKey), abstractResetAsAsync = true) + (SerialTLPort(() => port, sys.p(SerialTLKey)(id), system.serdessers(id), id), cells) + }).unzip + (ports.toSeq, cells.flatten.toSeq) + } +}) + +class WithChipIdIOCells extends OverrideIOBinder({ + (system: CanHavePeripheryChipIdPin) => system.chip_id_pin.map({ p => val sys = system.asInstanceOf[BaseSubsystem] - val (port, cells) = IOCell.generateIOFromSignal(s.getWrappedValue, "serial_tl", sys.p(IOCellKey), abstractResetAsAsync = true) - (Seq(port), cells) - }).getOrElse((Nil, Nil)) + val (port, cells) = IOCell.generateIOFromSignal(p.getWrappedValue, s"chip_id", sys.p(IOCellKey), abstractResetAsAsync = true) + (Seq(ChipIdPort(() => port)), cells) + }).getOrElse(Nil, Nil) }) class WithSerialTLPunchthrough extends OverrideIOBinder({ - (system: CanHavePeripheryTLSerial) => system.serial_tl.map({ s => - val sys = system.asInstanceOf[BaseSubsystem] - val port = IO(s.getWrappedValue.cloneType) - port <> s.getWrappedValue - (Seq(port), Nil) - }).getOrElse((Nil, Nil)) + (system: CanHavePeripheryTLSerial) => { + val (ports, cells) = system.serial_tls.zipWithIndex.map({ case (s, id) => + val sys = system.asInstanceOf[BaseSubsystem] + val port = IO(chiselTypeOf(s.getWrappedValue)) + port <> s.getWrappedValue + (SerialTLPort(() => port, sys.p(SerialTLKey)(id), system.serdessers(id), id), Nil) + }).unzip + (ports.toSeq, cells.flatten.toSeq) + } }) class WithAXI4MemPunchthrough extends OverrideLazyIOBinder({ @@ -321,12 +384,11 @@ class WithAXI4MemPunchthrough extends OverrideLazyIOBinder({ def clockBundle = clockSinkNode.get.in.head._1 InModuleBody { - val ports: Seq[ClockedAndResetIO[AXI4Bundle]] = system.mem_axi4.zipWithIndex.map({ case (m, i) => - val p = IO(new ClockedAndResetIO(DataMirror.internal.chiselTypeClone[AXI4Bundle](m))).suggestName(s"axi4_mem_${i}") - p.bits <> m - p.clock := clockBundle.clock - p.reset := clockBundle.reset - p + val ports: Seq[AXI4MemPort] = system.mem_axi4.zipWithIndex.map({ case (m, i) => + val port = IO(new ClockedIO(DataMirror.internal.chiselTypeClone[AXI4Bundle](m))).suggestName(s"axi4_mem_${i}") + port.bits <> m + port.clock := clockBundle.clock + AXI4MemPort(() => port, p(ExtMem).get, system.memAXI4Node.edges.in(i), p(MemoryBusKey).dtsFrequency.get.toInt) }).toSeq (ports, Nil) } @@ -341,12 +403,11 @@ class WithAXI4MMIOPunchthrough extends OverrideLazyIOBinder({ def clockBundle = clockSinkNode.get.in.head._1 InModuleBody { - val ports: Seq[ClockedAndResetIO[AXI4Bundle]] = system.mmio_axi4.zipWithIndex.map({ case (m, i) => - val p = IO(new ClockedAndResetIO(DataMirror.internal.chiselTypeClone[AXI4Bundle](m))).suggestName(s"axi4_mmio_${i}") - p.bits <> m - p.clock := clockBundle.clock - p.reset := clockBundle.reset - p + val ports: Seq[AXI4MMIOPort] = system.mmio_axi4.zipWithIndex.map({ case (m, i) => + val port = IO(new ClockedIO(DataMirror.internal.chiselTypeClone[AXI4Bundle](m))).suggestName(s"axi4_mmio_${i}") + port.bits <> m + port.clock := clockBundle.clock + AXI4MMIOPort(() => port, p(ExtBus).get, system.mmioAXI4Node.edges.in(i)) }).toSeq (ports, Nil) } @@ -361,11 +422,11 @@ class WithL2FBusAXI4Punchthrough extends OverrideLazyIOBinder({ def clockBundle = clockSinkNode.get.in.head._1 InModuleBody { - val ports: Seq[ClockedIO[AXI4Bundle]] = system.l2_frontend_bus_axi4.zipWithIndex.map({ case (m, i) => - val p = IO(new ClockedIO(Flipped(DataMirror.internal.chiselTypeClone[AXI4Bundle](m)))).suggestName(s"axi4_fbus_${i}") - m <> p.bits - p.clock := clockBundle.clock - p + val ports: Seq[AXI4InPort] = system.l2_frontend_bus_axi4.zipWithIndex.map({ case (m, i) => + val port = IO(new ClockedIO(Flipped(DataMirror.internal.chiselTypeClone[AXI4Bundle](m)))).suggestName(s"axi4_fbus_${i}") + m <> port.bits + port.clock := clockBundle.clock + AXI4InPort(() => port, p(ExtIn).get) }).toSeq (ports, Nil) } @@ -374,10 +435,12 @@ class WithL2FBusAXI4Punchthrough extends OverrideLazyIOBinder({ class WithBlockDeviceIOPunchthrough extends OverrideIOBinder({ (system: CanHavePeripheryBlockDevice) => { - val ports: Seq[ClockedIO[BlockDeviceIO]] = system.bdev.map({ bdev => - val p = IO(new ClockedIO(new BlockDeviceIO()(GetSystemParameters(system)))).suggestName("blockdev") - p <> bdev - p + val ports: Seq[BlockDevicePort] = system.bdev.map({ bdev => + val p = GetSystemParameters(system) + val bdParams = p(BlockDeviceKey).get + val port = IO(new ClockedIO(new BlockDeviceIO(bdParams))).suggestName("blockdev") + port <> bdev + BlockDevicePort(() => port, bdParams) }).toSeq (ports, Nil) } @@ -385,10 +448,11 @@ class WithBlockDeviceIOPunchthrough extends OverrideIOBinder({ class WithNICIOPunchthrough extends OverrideIOBinder({ (system: CanHavePeripheryIceNIC) => { - val ports: Seq[ClockedIO[NICIOvonly]] = system.icenicOpt.map({ n => - val p = IO(new ClockedIO(new NICIOvonly)).suggestName("nic") - p <> n - p + val ports: Seq[NICPort] = system.icenicOpt.map({ n => + val p = GetSystemParameters(system) + val port = IO(new ClockedIO(new NICIOvonly)).suggestName("nic") + port <> n + NICPort(() => port, p(NICKey).get) }).toSeq (ports, Nil) } @@ -398,16 +462,30 @@ class WithTraceGenSuccessPunchthrough extends OverrideIOBinder({ (system: TraceGenSystemModuleImp) => { val success: Bool = IO(Output(Bool())).suggestName("success") success := system.success - (Seq(success), Nil) + (Seq(SuccessPort(() => success)), Nil) } }) -class WithTraceIOPunchthrough extends OverrideIOBinder({ - (system: CanHaveTraceIOModuleImp) => { - val ports: Option[TraceOutputTop] = system.traceIO.map { t => +class WithTraceIOPunchthrough extends OverrideLazyIOBinder({ + (system: CanHaveTraceIO) => InModuleBody { + val ports: Option[TracePort] = system.traceIO.map { t => val trace = IO(DataMirror.internal.chiselTypeClone[TraceOutputTop](t)).suggestName("trace") trace <> t - trace + val p = GetSystemParameters(system) + val chipyardSystem = system.asInstanceOf[ChipyardSystem] + val tiles = chipyardSystem.totalTiles.values + val cfg = SpikeCosimConfig( + isa = tiles.headOption.map(_.isaDTS).getOrElse(""), + vlen = tiles.headOption.map(_.tileParams.core.vLen).getOrElse(0), + priv = tiles.headOption.map(t => if (t.usingUser) "MSU" else if (t.usingSupervisor) "MS" else "M").getOrElse(""), + mem0_base = p(ExtMem).map(_.master.base).getOrElse(BigInt(0)), + mem0_size = p(ExtMem).map(_.master.size).getOrElse(BigInt(0)), + pmpregions = tiles.headOption.map(_.tileParams.core.nPMPs).getOrElse(0), + nharts = tiles.size, + bootrom = chipyardSystem.bootROM.map(_.module.contents.toArray.mkString(" ")).getOrElse(""), + has_dtm = p(ExportDebug).protocols.contains(DMI) // assume that exposing clockeddmi means we will connect SimDTM + ) + TracePort(() => trace, cfg) } (ports.toSeq, Nil) } @@ -417,7 +495,7 @@ class WithCustomBootPin extends OverrideIOBinder({ (system: CanHavePeripheryCustomBootPin) => system.custom_boot_pin.map({ p => val sys = system.asInstanceOf[BaseSubsystem] val (port, cells) = IOCell.generateIOFromSignal(p.getWrappedValue, "custom_boot", sys.p(IOCellKey), abstractResetAsAsync = true) - (Seq(port), cells) + (Seq(CustomBootPort(() => port)), cells) }).getOrElse((Nil, Nil)) }) @@ -426,7 +504,7 @@ class WithUARTTSIPunchthrough extends OverrideIOBinder({ val sys = system.asInstanceOf[BaseSubsystem] val uart_tsi = IO(new UARTTSIIO(p.uartParams)) uart_tsi <> p - (Seq(uart_tsi), Nil) + (Seq(UARTTSIPort(() => uart_tsi)), Nil) }).getOrElse((Nil, Nil)) }) @@ -434,7 +512,7 @@ class WithTLMemPunchthrough extends OverrideIOBinder({ (system: CanHaveMasterTLMemPort) => { val io_tl_mem_pins_temp = IO(DataMirror.internal.chiselTypeClone[HeterogeneousBag[TLBundle]](system.mem_tl)).suggestName("tl_slave") io_tl_mem_pins_temp <> system.mem_tl - (Seq(io_tl_mem_pins_temp), Nil) + (Seq(TLMemPort(() => io_tl_mem_pins_temp)), Nil) } }) @@ -444,8 +522,8 @@ class WithDontTouchPorts extends OverrideIOBinder({ }) class WithNMITiedOff extends ComposeIOBinder({ - (system: HasTilesModuleImp) => { - system.nmi.flatten.foreach { nmi => + (system: HasHierarchicalElementsRootContextModuleImp) => { + system.nmi.foreach { nmi => nmi.rnmi := false.B nmi.rnmi_interrupt_vector := 0.U nmi.rnmi_exception_vector := 0.U diff --git a/generators/chipyard/src/main/scala/iobinders/Ports.scala b/generators/chipyard/src/main/scala/iobinders/Ports.scala new file mode 100644 index 00000000..6b327a18 --- /dev/null +++ b/generators/chipyard/src/main/scala/iobinders/Ports.scala @@ -0,0 +1,111 @@ +package chipyard.iobinders + +import chisel3._ +import chisel3.experimental.{Analog} +import sifive.blocks.devices.uart.{UARTPortIO} +import sifive.blocks.devices.spi.{SPIFlashParams, SPIPortIO} +import sifive.blocks.devices.gpio.{GPIOPortIO} +import testchipip.util.{ClockedIO} +import testchipip.serdes.{TLSerdesser, SerialIO, SerialTLParams} +import testchipip.spi.{SPIChipIO} +import testchipip.cosim.{TraceOutputTop, SpikeCosimConfig} +import testchipip.iceblk.{BlockDeviceIO, BlockDeviceConfig} +import testchipip.tsi.{UARTTSIIO} +import icenet.{NICIOvonly, NICConfig} +import org.chipsalliance.cde.config.{Parameters} +import freechips.rocketchip.amba.axi4.{AXI4Bundle, AXI4EdgeParameters} +import freechips.rocketchip.subsystem.{MemoryPortParams, MasterPortParams, SlavePortParams} +import freechips.rocketchip.devices.debug.{ClockedDMIIO} +import freechips.rocketchip.util.{HeterogeneousBag} +import freechips.rocketchip.tilelink.{TLBundle} + +trait Port[T <: Data] { + val getIO: () => T + // port.io should only be called in the TestHarness context + lazy val io = getIO() +} + +trait HasChipyardPorts { + def ports: Seq[Port[_]] +} + +// These case classes are generated by IOBinders, and interpreted by HarnessBinders +case class GPIOPort (val getIO: () => Analog, val gpioId: Int, val pinId: Int) + extends Port[Analog] + +case class GPIOPinsPort (val getIO: () => GPIOPortIO, val gpioId: Int) + extends Port[GPIOPortIO] + +case class I2CPort (val getIO: () => sifive.blocks.devices.i2c.I2CPort) + extends Port[sifive.blocks.devices.i2c.I2CPort] + +case class UARTPort (val getIO: () => UARTPortIO, val uartNo: Int, val freqMHz: Int) + extends Port[UARTPortIO] + +case class SPIFlashPort (val getIO: () => SPIChipIO, val params: SPIFlashParams, val spiId: Int) + extends Port[SPIChipIO] + +case class SPIPort (val getIO: () => SPIPortIO) + extends Port[SPIPortIO] + +case class BlockDevicePort (val getIO: () => ClockedIO[BlockDeviceIO], val params: BlockDeviceConfig) + extends Port[ClockedIO[BlockDeviceIO]] + +case class NICPort (val getIO: () => ClockedIO[NICIOvonly], val params: NICConfig) + extends Port[ClockedIO[NICIOvonly]] + +case class AXI4MemPort (val getIO: () => ClockedIO[AXI4Bundle], val params: MemoryPortParams, val edge: AXI4EdgeParameters, val clockFreqMHz: Int) + extends Port[ClockedIO[AXI4Bundle]] + +case class AXI4MMIOPort (val getIO: () => ClockedIO[AXI4Bundle], val params: MasterPortParams, val edge: AXI4EdgeParameters) + extends Port[ClockedIO[AXI4Bundle]] + +case class AXI4InPort (val getIO: () => ClockedIO[AXI4Bundle], val params: SlavePortParams) + extends Port[ClockedIO[AXI4Bundle]] + +case class ExtIntPort (val getIO: () => UInt) + extends Port[UInt] + +case class DMIPort (val getIO: () => ClockedDMIIO) + extends Port[ClockedDMIIO] + +case class JTAGPort (val getIO: () => JTAGChipIO) + extends Port[JTAGChipIO] + +// Lack of nice union types in scala-2 means we have to set this type as Data +case class SerialTLPort (val getIO: () => Data, val params: SerialTLParams, val serdesser: TLSerdesser, val portId: Int) + extends Port[Data] + +case class ChipIdPort (val getIO: () => UInt) + extends Port[UInt] + +case class UARTTSIPort (val getIO: () => UARTTSIIO) + extends Port[UARTTSIIO] + +case class SuccessPort (val getIO: () => Bool) + extends Port[Bool] + +case class TracePort (val getIO: () => TraceOutputTop, val cosimCfg: SpikeCosimConfig) + extends Port[TraceOutputTop] + +case class CustomBootPort (val getIO: () => Bool) + extends Port[Bool] + +case class ClockPort (val getIO: () => Clock, val freqMHz: Double) + extends Port[Clock] + +case class ClockTapPort (val getIO: () => Clock) + extends Port[Clock] + +case class ResetPort (val getIO: () => AsyncReset) + extends Port[Reset] + +case class DebugResetPort (val getIO: () => Reset) + extends Port[Reset] + +case class JTAGResetPort (val getIO: () => Reset) + extends Port[Reset] + +case class TLMemPort (val getIO: () => HeterogeneousBag[TLBundle]) + extends Port[HeterogeneousBag[TLBundle]] + diff --git a/generators/constellation b/generators/constellation index 03ed9e4e..81f005ff 160000 --- a/generators/constellation +++ b/generators/constellation @@ -1 +1 @@ -Subproject commit 03ed9e4ecd31d71d4bd48f02b0e806bc2b8a7e6b +Subproject commit 81f005ffeac998ebf0619e0bd7f0d212d68a82c5 diff --git a/generators/cva6 b/generators/cva6 index 46323fcd..9d1c1068 160000 --- a/generators/cva6 +++ b/generators/cva6 @@ -1 +1 @@ -Subproject commit 46323fcd7407544c751b353f52e356eb8f33e9d1 +Subproject commit 9d1c106834824ddb8052b7f60574b2b544b40395 diff --git a/generators/fft-generator b/generators/fft-generator index 811951b4..4e7e6cbb 160000 --- a/generators/fft-generator +++ b/generators/fft-generator @@ -1 +1 @@ -Subproject commit 811951b44a113f87710a6abaae4582120c1194ba +Subproject commit 4e7e6cbbbc6ed96d27dbaeb2413764cd446c50b3 diff --git a/generators/firechip/src/main/scala/BridgeBinders.scala b/generators/firechip/src/main/scala/BridgeBinders.scala index db6ec2fb..bd662a27 100644 --- a/generators/firechip/src/main/scala/BridgeBinders.scala +++ b/generators/firechip/src/main/scala/BridgeBinders.scala @@ -3,7 +3,6 @@ package firesim.firesim import chisel3._ -import chisel3.experimental.annotate import chisel3.experimental.{DataMirror, Direction} import chisel3.util.experimental.BoringUtils @@ -12,31 +11,29 @@ import freechips.rocketchip.diplomacy.{LazyModule} import freechips.rocketchip.devices.debug.{Debug, HasPeripheryDebug, ExportDebug, DMI} import freechips.rocketchip.amba.axi4.{AXI4Bundle} import freechips.rocketchip.subsystem._ -import freechips.rocketchip.tile.{RocketTile} import freechips.rocketchip.prci.{ClockBundle, ClockBundleParameters} import freechips.rocketchip.util.{ResetCatchAndSync} import sifive.blocks.devices.uart._ -import testchipip._ +import testchipip.serdes.{ExternalSyncSerialIO} +import testchipip.tsi.{SerialRAM} import icenet.{CanHavePeripheryIceNIC, SimNetwork, NicLoopback, NICKey, NICIOvonly} import junctions.{NastiKey, NastiParameters} import midas.models.{FASEDBridge, AXI4EdgeSummary, CompleteConfig} -import midas.targetutils.{MemModelAnnotation, EnableModelMultiThreadingAnnotation} import firesim.bridges._ import firesim.configs.MemModelKey import tracegen.{TraceGenSystemModuleImp} import cva6.CVA6Tile -import boom.common.{BoomTile} import barstools.iocell.chisel._ -import chipyard.iobinders.{IOBinders, OverrideIOBinder, ComposeIOBinder, GetSystemParameters, IOCellKey} +import chipyard.iobinders._ import chipyard._ import chipyard.harness._ object MainMemoryConsts { val regionNamePrefix = "MainMemory" - def globalName()(implicit p: Parameters) = s"${regionNamePrefix}_${p(MultiChipIdx)}" + def globalName(chipId: Int) = s"${regionNamePrefix}_$chipId" } trait Unsupported { @@ -69,130 +66,73 @@ class WithFireSimIOCellModels extends Config((site, here, up) => { case IOCellKey => FireSimIOCellParams() }) -class WithTSIBridgeAndHarnessRAMOverSerialTL extends OverrideHarnessBinder({ - (system: CanHavePeripheryTLSerial, th: FireSim, ports: Seq[ClockedIO[SerialIO]]) => { - ports.map { port => - implicit val p = GetSystemParameters(system) - val bits = port.bits - port.clock := th.harnessBinderClock - val ram = TSIHarness.connectRAM(system.serdesser.get, bits, th.harnessBinderReset) - TSIBridge(th.harnessBinderClock, ram.module.io.tsi, p(ExtMem).map(_ => MainMemoryConsts.globalName), th.harnessBinderReset.asBool) - } - Nil - } -}) +class WithTSIBridgeAndHarnessRAMOverSerialTL extends HarnessBinder({ + case (th: FireSim, port: SerialTLPort, chipId: Int) => { + port.io match { + case io: ExternalSyncSerialIO => { + io.clock_in := th.harnessBinderClock + val ram = Module(LazyModule(new SerialRAM(port.serdesser, port.params)(port.serdesser.p)).module) + ram.io.ser.in <> io.out + io.in <> ram.io.ser.out -class WithNICBridge extends OverrideHarnessBinder({ - (system: CanHavePeripheryIceNIC, th: FireSim, ports: Seq[ClockedIO[NICIOvonly]]) => { - val p: Parameters = GetSystemParameters(system) - ports.map { n => NICBridge(n.clock, n.bits)(p) } - Nil - } -}) - -class WithUARTBridge extends OverrideHarnessBinder({ - (system: HasPeripheryUARTModuleImp, th: FireSim, ports: Seq[UARTPortIO]) => - val uartSyncClock = Wire(Clock()) - uartSyncClock := false.B.asClock - val pbusClockNode = system.outer.asInstanceOf[HasTileLinkLocations].locateTLBusWrapper(PBUS).fixedClockNode - val pbusClock = pbusClockNode.in.head._1.clock - BoringUtils.bore(pbusClock, Seq(uartSyncClock)) - ports.map { p => UARTBridge(uartSyncClock, p, th.harnessBinderReset.asBool)(system.p) }; Nil -}) - -class WithBlockDeviceBridge extends OverrideHarnessBinder({ - (system: CanHavePeripheryBlockDevice, th: FireSim, ports: Seq[ClockedIO[BlockDeviceIO]]) => { - implicit val p: Parameters = GetSystemParameters(system) - ports.map { b => BlockDevBridge(b.clock, b.bits, th.harnessBinderReset.asBool) } - Nil - } -}) - - -class WithFASEDBridge extends OverrideHarnessBinder({ - (system: CanHaveMasterAXI4MemPort, th: FireSim, ports: Seq[ClockedAndResetIO[AXI4Bundle]]) => { - implicit val p: Parameters = GetSystemParameters(system) - (ports zip system.memAXI4Node.edges.in).map { case (axi4, edge) => - val nastiKey = NastiParameters(axi4.bits.r.bits.data.getWidth, - axi4.bits.ar.bits.addr.getWidth, - axi4.bits.ar.bits.id.getWidth) - system match { - case s: BaseSubsystem => FASEDBridge(axi4.clock, axi4.bits, axi4.reset.asBool, - CompleteConfig(p(firesim.configs.MemModelKey), - nastiKey, - Some(AXI4EdgeSummary(edge)), - Some(MainMemoryConsts.globalName))) - case _ => throw new Exception("Attempting to attach FASED Bridge to misconfigured design") + // This assumes that: + // If ExtMem for the target is defined, then FASED bridge will be attached + // If FASED bridge is attached, loadmem widget is present + val hasMainMemory = th.chipParameters(chipId)(ExtMem).isDefined + val mainMemoryName = Option.when(hasMainMemory)(MainMemoryConsts.globalName(chipId)) + TSIBridge(th.harnessBinderClock, ram.io.tsi.get, mainMemoryName, th.harnessBinderReset.asBool)(th.p) } } - Nil } }) -class WithTracerVBridge extends ComposeHarnessBinder({ - (system: CanHaveTraceIOModuleImp, th: FireSim, ports: Seq[TraceOutputTop]) => { - ports.map { p => p.traces.map(tileTrace => TracerVBridge(tileTrace)(system.p)) } - Nil +class WithNICBridge extends HarnessBinder({ + case (th: FireSim, port: NICPort, chipId: Int) => { + NICBridge(port.io.clock, port.io.bits)(th.p) } }) -class WithCospikeBridge extends ComposeHarnessBinder({ - (system: CanHaveTraceIOModuleImp, th: FireSim, ports: Seq[TraceOutputTop]) => { - implicit val p = chipyard.iobinders.GetSystemParameters(system) - val chipyardSystem = system.asInstanceOf[ChipyardSystemModule[_]].outer.asInstanceOf[ChipyardSystem] - val tiles = chipyardSystem.tiles - val cfg = SpikeCosimConfig( - isa = tiles.headOption.map(_.isaDTS).getOrElse(""), - vlen = tiles.headOption.map(_.tileParams.core.vLen).getOrElse(0), - priv = tiles.headOption.map(t => if (t.usingUser) "MSU" else if (t.usingSupervisor) "MS" else "M").getOrElse(""), - mem0_base = p(ExtMem).map(_.master.base).getOrElse(BigInt(0)), - mem0_size = p(ExtMem).map(_.master.size).getOrElse(BigInt(0)), - pmpregions = tiles.headOption.map(_.tileParams.core.nPMPs).getOrElse(0), - nharts = tiles.size, - bootrom = chipyardSystem.bootROM.map(_.module.contents.toArray.mkString(" ")).getOrElse(""), - has_dtm = p(ExportDebug).protocols.contains(DMI) // assume that exposing clockeddmi means we will connect SimDTM - ) - ports.map { p => p.traces.zipWithIndex.map(t => CospikeBridge(t._1, t._2, cfg)) } +class WithUARTBridge extends HarnessBinder({ + case (th: FireSim, port: UARTPort, chipId: Int) => + val uartSyncClock = th.harnessClockInstantiator.requestClockMHz("uart_clock", port.freqMHz) + UARTBridge(uartSyncClock, port.io, th.harnessBinderReset.asBool, port.freqMHz)(th.p) +}) + +class WithBlockDeviceBridge extends HarnessBinder({ + case (th: FireSim, port: BlockDevicePort, chipId: Int) => { + BlockDevBridge(port.io.clock, port.io.bits, th.harnessBinderReset.asBool) } }) -class WithTraceGenBridge extends OverrideHarnessBinder({ - (system: TraceGenSystemModuleImp, th: FireSim, ports: Seq[Bool]) => - ports.map { p => GroundTestBridge(th.harnessBinderClock, p)(system.p) }; Nil -}) -class WithFireSimMultiCycleRegfile extends ComposeIOBinder({ - (system: HasTilesModuleImp) => { - system.outer.tiles.map { - case r: RocketTile => { - annotate(MemModelAnnotation(r.module.core.rocketImpl.rf.rf)) - r.module.fpuOpt.foreach(fpu => annotate(MemModelAnnotation(fpu.fpuImpl.regfile))) - } - case b: BoomTile => { - val core = b.module.core - core.iregfile match { - case irf: boom.exu.RegisterFileSynthesizable => annotate(MemModelAnnotation(irf.regfile)) - } - if (core.fp_pipeline != null) core.fp_pipeline.fregfile match { - case frf: boom.exu.RegisterFileSynthesizable => annotate(MemModelAnnotation(frf.regfile)) - } - } - case _ => - } - (Nil, Nil) +class WithFASEDBridge extends HarnessBinder({ + case (th: FireSim, port: AXI4MemPort, chipId: Int) => { + val nastiKey = NastiParameters(port.io.bits.r.bits.data.getWidth, + port.io.bits.ar.bits.addr.getWidth, + port.io.bits.ar.bits.id.getWidth) + FASEDBridge(port.io.clock, port.io.bits, th.harnessBinderReset.asBool, + CompleteConfig(th.p(firesim.configs.MemModelKey), + nastiKey, + Some(AXI4EdgeSummary(port.edge)), + Some(MainMemoryConsts.globalName(chipId))))(th.p) } }) -class WithFireSimFAME5 extends ComposeIOBinder({ - (system: HasTilesModuleImp) => { - system.outer.tiles.map { - case b: BoomTile => - annotate(EnableModelMultiThreadingAnnotation(b.module)) - case r: RocketTile => - annotate(EnableModelMultiThreadingAnnotation(r.module)) - case _ => Nil - } - (Nil, Nil) +class WithTracerVBridge extends HarnessBinder({ + case (th: FireSim, port: TracePort, chipId: Int) => { + port.io.traces.map(tileTrace => TracerVBridge(tileTrace)(th.p)) + } +}) + +class WithCospikeBridge extends HarnessBinder({ + case (th: FireSim, port: TracePort, chipId: Int) => { + port.io.traces.zipWithIndex.map(t => CospikeBridge(t._1, t._2, port.cosimCfg)) + } +}) + +class WithSuccessBridge extends HarnessBinder({ + case (th: FireSim, port: SuccessPort, chipId: Int) => { + GroundTestBridge(th.harnessBinderClock, port.io)(th.p) } }) diff --git a/generators/firechip/src/main/scala/FireSim.scala b/generators/firechip/src/main/scala/FireSim.scala index c20abca1..599788bc 100644 --- a/generators/firechip/src/main/scala/FireSim.scala +++ b/generators/firechip/src/main/scala/FireSim.scala @@ -5,21 +5,26 @@ package firesim.firesim import scala.collection.mutable.{LinkedHashMap} import chisel3._ -import chisel3.experimental.{IO} +import chisel3.experimental.{IO, annotate} import freechips.rocketchip.prci._ -import freechips.rocketchip.subsystem.{BaseSubsystem, SubsystemDriveAsyncClockGroupsKey} +import freechips.rocketchip.subsystem._ import org.chipsalliance.cde.config.{Field, Config, Parameters} import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp, InModuleBody, ValName} import freechips.rocketchip.util.{ResetCatchAndSync, RecordMap} +import freechips.rocketchip.tile.{RocketTile} +import boom.common.{BoomTile} import midas.widgets.{Bridge, PeekPokeBridge, RationalClockBridge, RationalClock, ResetPulseBridge, ResetPulseBridgeParameters} - +import midas.targetutils.{MemModelAnnotation, EnableModelMultiThreadingAnnotation} import chipyard._ import chipyard.harness._ import chipyard.iobinders._ import chipyard.clocking._ +case object FireSimMultiCycleRegFile extends Field[Boolean](false) +case object FireSimFAME5 extends Field[Boolean](false) + /** * Under FireSim's current multiclock implementation there can be only a * single clock bridge. This requires, therefore, that it be instantiated in @@ -85,11 +90,46 @@ class FireSim(implicit val p: Parameters) extends RawModule with HasHarnessInsta override val supportsMultiChip = true - instantiateChipTops() + val chiptops = instantiateChipTops() // Ensures FireSim-synthesized assertions and instrumentation is disabled // while resetBridge.io.reset is asserted. This ensures assertions do not fire at // time zero in the event their local reset is delayed (typically because it // has been pipelined) midas.targetutils.GlobalResetCondition(resetBridge.io.reset) + + + // FireSim multi-cycle regfile optimization + // FireSim ModelMultithreading + chiptops.foreach { + case c: ChipTop => c.lazySystem match { + case ls: InstantiatesHierarchicalElements => { + if (p(FireSimMultiCycleRegFile)) ls.totalTiles.values.map { + case r: RocketTile => { + annotate(MemModelAnnotation(r.module.core.rocketImpl.rf.rf)) + r.module.fpuOpt.foreach(fpu => annotate(MemModelAnnotation(fpu.fpuImpl.regfile))) + } + case b: BoomTile => { + val core = b.module.core + core.iregfile match { + case irf: boom.exu.RegisterFileSynthesizable => annotate(MemModelAnnotation(irf.regfile)) + } + if (core.fp_pipeline != null) core.fp_pipeline.fregfile match { + case frf: boom.exu.RegisterFileSynthesizable => annotate(MemModelAnnotation(frf.regfile)) + } + } + case _ => + } + if (p(FireSimFAME5)) ls.totalTiles.values.map { + case b: BoomTile => + annotate(EnableModelMultiThreadingAnnotation(b.module)) + case r: RocketTile => + annotate(EnableModelMultiThreadingAnnotation(r.module)) + case _ => Nil + } + } + case _ => + } + case _ => + } } diff --git a/generators/firechip/src/main/scala/TargetConfigs.scala b/generators/firechip/src/main/scala/TargetConfigs.scala index c08a028d..04bb26a4 100644 --- a/generators/firechip/src/main/scala/TargetConfigs.scala +++ b/generators/firechip/src/main/scala/TargetConfigs.scala @@ -13,7 +13,8 @@ import freechips.rocketchip.subsystem._ import freechips.rocketchip.devices.tilelink.{BootROMLocated, BootROMParams} import freechips.rocketchip.devices.debug.{DebugModuleParams, DebugModuleKey} import freechips.rocketchip.diplomacy.{LazyModule, AsynchronousCrossing} -import testchipip.{BlockDeviceKey, BlockDeviceConfig, TracePortKey, TracePortParams} +import testchipip.iceblk.{BlockDeviceKey, BlockDeviceConfig} +import testchipip.cosim.{TracePortKey, TracePortParams} import sifive.blocks.devices.uart.{PeripheryUARTKey, UARTParams} import scala.math.{min, max} @@ -55,6 +56,16 @@ class WithScalaTestFeatures extends Config((site, here, up) => { case TracePortKey => up(TracePortKey, site).map(_.copy(print = true)) }) +// Multi-cycle regfile for rocket+boom +class WithFireSimMultiCycleRegfile extends Config((site, here, up) => { + case FireSimMultiCycleRegFile => true +}) + +// Model multithreading optimization +class WithFireSimFAME5 extends Config((site, here, up) => { + case FireSimFAME5 => true +}) + // FASED Config Aliases. This to enable config generation via "_" concatenation // which requires that all config classes be defined in the same package class DDR3FCFS extends FCFS16GBQuadRank @@ -72,7 +83,9 @@ class WithMinimalFireSimDesignTweaks extends Config( // Required*: Punch all clocks to FireSim's harness clock instantiator new WithFireSimHarnessClockBridgeInstantiator ++ new chipyard.harness.WithHarnessBinderClockFreqMHz(1000.0) ++ - new chipyard.harness.WithClockAndResetFromHarness ++ + new chipyard.harness.WithClockFromHarness ++ + new chipyard.harness.WithResetFromHarness ++ + new chipyard.config.WithNoClockTap ++ new chipyard.clocking.WithPassthroughClockGenerator ++ // Required*: When using FireSim-as-top to provide a correct path to the target bootrom source new WithBootROM ++ @@ -87,18 +100,20 @@ class WithMinimalFireSimDesignTweaks extends Config( // Non-frequency tweaks that are generally applied to all firesim configs class WithFireSimDesignTweaks extends Config( new WithMinimalFireSimDesignTweaks ++ + // Required: Remove the debug clock tap, this breaks compilation of target-level sim in FireSim + new chipyard.config.WithNoClockTap ++ // Required: Bake in the default FASED memory model new WithDefaultMemModel ++ // Optional: reduce the width of the Serial TL interface - new testchipip.WithSerialTLWidth(4) ++ + new testchipip.serdes.WithSerialTLWidth(4) ++ // Required*: Scale default baud rate with periphery bus frequency new chipyard.config.WithUARTInitBaudRate(BigInt(3686400L)) ++ // Optional: Adds IO to attach tracerV bridges new chipyard.config.WithTraceIO ++ - // Optional: Request 16 GiB of target-DRAM by default (can safely request up to 32 GiB on F1) + // Optional: Request 16 GiB of target-DRAM by default (can safely request up to 64 GiB on F1) new freechips.rocketchip.subsystem.WithExtMemSize((1 << 30) * 16L) ++ // Optional: Removing this will require using an initramfs under linux - new testchipip.WithBlockDevice + new testchipip.iceblk.WithBlockDevice ) // Tweaks to modify target clock frequencies / crossings to legacy firesim defaults @@ -110,16 +125,17 @@ class WithFireSimHighPerfClocking extends Config( // This frequency selection matches FireSim's legacy selection and is required // to support 200Gb NIC performance. You may select a smaller value. new chipyard.config.WithPeripheryBusFrequency(3200.0) ++ + new chipyard.config.WithControlBusFrequency(3200.0) ++ new chipyard.config.WithSystemBusFrequency(3200.0) ++ new chipyard.config.WithFrontBusFrequency(3200.0) ++ + new chipyard.config.WithControlBusFrequency(3200.0) ++ // Optional: These three configs put the DRAM memory system in it's own clock domain. // Removing the first config will result in the FASED timing model running // at the pbus freq (above, 3.2 GHz), which is outside the range of valid DDR3 speedgrades. // 1 GHz matches the FASED default, using some other frequency will require // runnings the FASED runtime configuration generator to generate faithful DDR3 timing values. new chipyard.config.WithMemoryBusFrequency(1000.0) ++ - new chipyard.config.WithAsynchrousMemoryBusCrossing ++ - new testchipip.WithAsynchronousSerialSlaveCrossing + new chipyard.config.WithAsynchrousMemoryBusCrossing ) // Tweaks that are generally applied to all firesim configs setting a single clock domain at 1000 MHz @@ -128,8 +144,11 @@ class WithFireSimConfigTweaks extends Config( // Using some other frequency will require runnings the FASED runtime configuration generator // to generate faithful DDR3 timing values. new chipyard.config.WithSystemBusFrequency(1000.0) ++ + new chipyard.config.WithControlBusFrequency(1000.0) ++ new chipyard.config.WithPeripheryBusFrequency(1000.0) ++ + new chipyard.config.WithControlBusFrequency(1000.0) ++ new chipyard.config.WithMemoryBusFrequency(1000.0) ++ + new chipyard.config.WithFrontBusFrequency(1000.0) ++ new WithFireSimDesignTweaks ) @@ -138,7 +157,7 @@ class WithFireSimConfigTweaks extends Config( class WithMinimalFireSimHighPerfConfigTweaks extends Config( new WithFireSimHighPerfClocking ++ new freechips.rocketchip.subsystem.WithNoMemPort ++ - new testchipip.WithMbusScratchpad ++ + new testchipip.soc.WithMbusScratchpad ++ new WithMinimalFireSimDesignTweaks ) @@ -148,8 +167,8 @@ class WithMinimalFireSimHighPerfConfigTweaks extends Config( class WithMinimalAndBlockDeviceFireSimHighPerfConfigTweaks extends Config( new WithFireSimHighPerfClocking ++ new freechips.rocketchip.subsystem.WithNoMemPort ++ // removes mem port for FASEDBridge to match against - new testchipip.WithMbusScratchpad ++ // adds backing scratchpad for memory to replace FASED model - new testchipip.WithBlockDevice(true) ++ // add in block device + new testchipip.soc.WithMbusScratchpad ++ // adds backing scratchpad for memory to replace FASED model + new testchipip.iceblk.WithBlockDevice(true) ++ // add in block device new WithMinimalFireSimDesignTweaks ) @@ -175,13 +194,14 @@ class WithFireSimTestChipConfigTweaks extends Config( new chipyard.config.WithSystemBusFrequency(500.0) ++ // Realistic system bus frequency new chipyard.config.WithMemoryBusFrequency(1000.0) ++ // Needs to be 1000 MHz to model DDR performance accurately new chipyard.config.WithPeripheryBusFrequency(500.0) ++ // Match the sbus and pbus frequency + new chipyard.config.WithFrontBusFrequency(500.0) ++ // Match the sbus and fbus frequency + new chipyard.config.WithControlBusFrequency(500.0) ++ // Match the sbus and cbus frequency new chipyard.clocking.WithClockGroupsCombinedByName(("uncore", Seq("sbus", "pbus", "fbus", "cbus", "implicit"), Seq("tile"))) ++ // Crossing specifications new chipyard.config.WithCbusToPbusCrossingType(AsynchronousCrossing()) ++ // Add Async crossing between PBUS and CBUS new chipyard.config.WithSbusToMbusCrossingType(AsynchronousCrossing()) ++ // Add Async crossings between backside of L2 and MBUS new freechips.rocketchip.subsystem.WithRationalRocketTiles ++ // Add rational crossings between RocketTile and uncore new boom.common.WithRationalBoomTiles ++ // Add rational crossings between BoomTile and uncore - new testchipip.WithAsynchronousSerialSlaveCrossing ++ // Add Async crossing between serial and MBUS. Its master-side is tied to the FBUS new WithFireSimDesignTweaks ) @@ -236,11 +256,18 @@ class FireSimSmallSystemConfig extends Config( new WithDefaultMemModel ++ new WithBootROM ++ new chipyard.config.WithPeripheryBusFrequency(3200.0) ++ + new chipyard.config.WithControlBusFrequency(3200.0) ++ + new chipyard.config.WithSystemBusFrequency(3200.0) ++ + new chipyard.config.WithFrontBusFrequency(3200.0) ++ + new chipyard.config.WithMemoryBusFrequency(3200.0) ++ new WithoutClockGating ++ new WithoutTLMonitors ++ new freechips.rocketchip.subsystem.WithExtMemSize(1 << 28) ++ - new testchipip.WithDefaultSerialTL ++ - new testchipip.WithBlockDevice ++ + new testchipip.serdes.WithSerialTL(Seq(testchipip.serdes.SerialTLParams( + client = Some(testchipip.serdes.SerialTLClientParams(idBits = 4)), + phyParams = testchipip.serdes.ExternalSyncSerialParams(width=32) + ))) ++ + new testchipip.iceblk.WithBlockDevice ++ new chipyard.config.WithUARTInitBaudRate(BigInt(3686400L)) ++ new freechips.rocketchip.subsystem.WithInclusiveCache(nWays = 2, capacityKB = 64) ++ new chipyard.RocketConfig) @@ -289,6 +316,7 @@ class FireSimLeanGemminiPrintfRocketConfig extends Config( //********************************************************************************** class SupernodeFireSimRocketConfig extends Config( new WithFireSimHarnessClockBridgeInstantiator ++ + new WithDefaultMemModel ++ // this is a global for all the multi-chip configs new chipyard.harness.WithHomogeneousMultiChip(n=4, new Config( new freechips.rocketchip.subsystem.WithExtMemSize((1 << 30) * 8L) ++ // 8GB DRAM per node new FireSimRocketConfig))) @@ -317,7 +345,7 @@ class FireSim16LargeBoomConfig extends Config( class FireSimNoMemPortConfig extends Config( new WithDefaultFireSimBridges ++ new freechips.rocketchip.subsystem.WithNoMemPort ++ - new testchipip.WithMbusScratchpad ++ + new testchipip.soc.WithMbusScratchpad ++ new WithFireSimConfigTweaks ++ new chipyard.RocketConfig) diff --git a/generators/ibex b/generators/ibex index 66ec6e56..c2174aba 160000 --- a/generators/ibex +++ b/generators/ibex @@ -1 +1 @@ -Subproject commit 66ec6e56ed69df4e4af5383128cf21adf88b08fc +Subproject commit c2174aba4fb304c7565c248f2a673f7151be896b diff --git a/generators/icenet b/generators/icenet index 68b4c7f3..d6a471f2 160000 --- a/generators/icenet +++ b/generators/icenet @@ -1 +1 @@ -Subproject commit 68b4c7f30f0119fe5cfab7ea99fb6927a563e112 +Subproject commit d6a471f2187c0671eea6567c7ba29e86e830e8d4 diff --git a/generators/nvdla b/generators/nvdla index 730fad43..95697452 160000 --- a/generators/nvdla +++ b/generators/nvdla @@ -1 +1 @@ -Subproject commit 730fad4360e67b14b1a4656ac58aaa40cfd4fe6b +Subproject commit 95697452e51ad56230a6e631bb02b3351c4293c6 diff --git a/generators/riscv-sodor b/generators/riscv-sodor index c1c809eb..bbfc3c35 160000 --- a/generators/riscv-sodor +++ b/generators/riscv-sodor @@ -1 +1 @@ -Subproject commit c1c809ebd5c9a76cd60d8c3169cea4bf4b2fa8fd +Subproject commit bbfc3c35100329386314c49b62b49a7f42f65e87 diff --git a/generators/rocc-acc-utils b/generators/rocc-acc-utils new file mode 160000 index 00000000..b001c888 --- /dev/null +++ b/generators/rocc-acc-utils @@ -0,0 +1 @@ +Subproject commit b001c888f9620189cd13d2c6ba19f1e28663a3cb diff --git a/generators/rocket-chip b/generators/rocket-chip index 50adbdb3..749a3eae 160000 --- a/generators/rocket-chip +++ b/generators/rocket-chip @@ -1 +1 @@ -Subproject commit 50adbdb3e4e18c2b3de57693323f4174b60f9767 +Subproject commit 749a3eae9678bc70b029c5b9091fae33fad539c4 diff --git a/generators/rocket-chip-blocks b/generators/rocket-chip-blocks new file mode 160000 index 00000000..212c7b07 --- /dev/null +++ b/generators/rocket-chip-blocks @@ -0,0 +1 @@ +Subproject commit 212c7b070bc7132f31a26deec6b2bde9e0b1b612 diff --git a/generators/rocket-chip-inclusive-cache b/generators/rocket-chip-inclusive-cache new file mode 160000 index 00000000..1332d226 --- /dev/null +++ b/generators/rocket-chip-inclusive-cache @@ -0,0 +1 @@ +Subproject commit 1332d2268ae01b2b311966d53a3ee0d930e83f07 diff --git a/generators/shuttle b/generators/shuttle index e628836c..fd325d43 160000 --- a/generators/shuttle +++ b/generators/shuttle @@ -1 +1 @@ -Subproject commit e628836c3c4bfe29927cd9e1473801fab33dee6c +Subproject commit fd325d43a162378dc1984e87297e6d710167db79 diff --git a/generators/sifive-blocks b/generators/sifive-blocks deleted file mode 160000 index 5edd72e7..00000000 --- a/generators/sifive-blocks +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5edd72e793ccb534b1395d0d8c1831754fd72fec diff --git a/generators/sifive-cache b/generators/sifive-cache deleted file mode 160000 index 51d400bd..00000000 --- a/generators/sifive-cache +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 51d400bd32131e8914c6713bfb71bef690f2fe70 diff --git a/generators/testchipip b/generators/testchipip index e1d8ef10..d1f472ec 160000 --- a/generators/testchipip +++ b/generators/testchipip @@ -1 +1 @@ -Subproject commit e1d8ef1012e74028b2920a27e1855f7c7600399c +Subproject commit d1f472ecb1d3c14492bf4591bea6d1284e162d9a diff --git a/generators/tracegen/src/main/scala/Configs.scala b/generators/tracegen/src/main/scala/Configs.scala index 5d4f0211..f51052c5 100644 --- a/generators/tracegen/src/main/scala/Configs.scala +++ b/generators/tracegen/src/main/scala/Configs.scala @@ -13,19 +13,18 @@ import scala.math.{max, min} class WithTraceGen( n: Int = 2, - overrideIdOffset: Option[Int] = None, overrideMemOffset: Option[BigInt] = None)( params: Seq[DCacheParams] = List.fill(n){ DCacheParams(nSets = 16, nWays = 1) }, nReqs: Int = 8192 ) extends Config((site, here, up) => { case TilesLocated(InSubsystem) => { val prev = up(TilesLocated(InSubsystem), site) - val idOffset = overrideIdOffset.getOrElse(prev.size) + val idOffset = up(NumTiles) val memOffset: BigInt = overrideMemOffset.orElse(site(ExtMem).map(_.master.base)).getOrElse(0x0L) params.zipWithIndex.map { case (dcp, i) => TraceGenTileAttachParams( tileParams = TraceGenParams( - hartId = i + idOffset, + tileId = i + idOffset, dcache = Some(dcp), wordBits = site(XLen), addrBits = 48, @@ -48,23 +47,23 @@ class WithTraceGen( ) } ++ prev } + case NumTiles => up(NumTiles) + n }) class WithBoomTraceGen( n: Int = 2, - overrideIdOffset: Option[Int] = None, overrideMemOffset: Option[BigInt] = None)( params: Seq[DCacheParams] = List.fill(n){ DCacheParams(nMSHRs = 4, nSets = 16, nWays = 2) }, nReqs: Int = 8192 ) extends Config((site, here, up) => { case TilesLocated(InSubsystem) => { val prev = up(TilesLocated(InSubsystem), site) - val idOffset = overrideIdOffset.getOrElse(prev.size) + val idOffset = up(NumTiles) val memOffset: BigInt = overrideMemOffset.orElse(site(ExtMem).map(_.master.base)).getOrElse(0x0L) params.zipWithIndex.map { case (dcp, i) => BoomTraceGenTileAttachParams( tileParams = BoomTraceGenParams( - hartId = i + idOffset, + tileId = i + idOffset, dcache = Some(dcp), wordBits = site(XLen), addrBits = 48, @@ -84,24 +83,24 @@ class WithBoomTraceGen( ) } ++ prev } + case NumTiles => up(NumTiles) + n }) class WithL2TraceGen( n: Int = 2, - overrideIdOffset: Option[Int] = None, overrideMemOffset: Option[BigInt] = None)( params: Seq[DCacheParams] = List.fill(n){ DCacheParams(nSets = 16, nWays = 1) }, nReqs: Int = 8192 ) extends Config((site, here, up) => { case TilesLocated(InSubsystem) => { val prev = up(TilesLocated(InSubsystem), site) - val idOffset = overrideIdOffset.getOrElse(prev.size) + val idOffset = up(NumTiles) val memOffset: BigInt = overrideMemOffset.orElse(site(ExtMem).map(_.master.base)).getOrElse(0x0L) params.zipWithIndex.map { case (dcp, i) => TraceGenTileAttachParams( tileParams = TraceGenParams( - hartId = i + idOffset, + tileId = i + idOffset, dcache = Some(dcp), wordBits = site(XLen), addrBits = 48, @@ -126,4 +125,5 @@ class WithL2TraceGen( ) } ++ prev } + case NumTiles => up(NumTiles) + n }) diff --git a/generators/tracegen/src/main/scala/System.scala b/generators/tracegen/src/main/scala/System.scala index 2a0ba3d5..488054d3 100644 --- a/generators/tracegen/src/main/scala/System.scala +++ b/generators/tracegen/src/main/scala/System.scala @@ -9,15 +9,28 @@ import freechips.rocketchip.subsystem._ import boom.lsu.BoomTraceGenTile class TraceGenSystem(implicit p: Parameters) extends BaseSubsystem - with HasTiles + with InstantiatesHierarchicalElements + with HasTileNotificationSinks + with HasTileInputConstants + with HasHierarchicalElementsRootContext + with HasHierarchicalElements with CanHaveMasterAXI4MemPort { def coreMonitorBundles = Nil - val tileStatusNodes = tiles.collect { + + val tileStatusNodes = totalTiles.values.toSeq.collect { case t: GroundTestTile => t.statusNode.makeSink() case t: BoomTraceGenTile => t.statusNode.makeSink() } - lazy val debugNode = IntSyncXbar() := NullIntSyncSource() + + lazy val fakeClockDomain = sbus.generateSynchronousDomain + + lazy val clintOpt = None + lazy val debugOpt = None + lazy val plicOpt = None + lazy val clintDomainOpt = Some(fakeClockDomain) + lazy val plicDomainOpt = Some(fakeClockDomain) + override lazy val module = new TraceGenSystemModuleImp(this) } diff --git a/scripts/build-setup.sh b/scripts/build-setup.sh index c95056db..a55b10fd 100755 --- a/scripts/build-setup.sh +++ b/scripts/build-setup.sh @@ -29,7 +29,8 @@ usage() { echo " 7. FireSim pre-compile sources" echo " 8. FireMarshal" echo " 9. FireMarshal pre-compile default buildroot Linux sources" - echo " 10. Runs repository clean-up" + echo " 10. Install CIRCT" + echo " 11. Runs repository clean-up" echo "" echo "**See below for options to skip parts of the setup. Skipping parts of the setup is not guaranteed to be tested/working.**" echo "" @@ -37,12 +38,20 @@ usage() { echo " --help -h : Display this message" echo " --force -f : Skip all prompts and checks" - echo " --skip-validate : DEPRECATED: Same functionality as --force" echo " --verbose -v : Verbose printout" echo " --use-unpinned-deps -ud : Use unpinned conda environment" echo " --skip -s N : Skip step N in the list above. Use multiple times to skip multiple steps ('-s N -s M ...')." + echo " --skip-conda : Skip Conda initialization (step 1)" + echo " --skip-submodules : Skip submodule initialization (step 2)" + echo " --skip-toolchain : Skip toolchain collateral (step 3)" + echo " --skip-ctags : Skip ctags (step 4)" + echo " --skip-precompile : Skip precompiling sources (steps 5/7)" + echo " --skip-firesim : Skip Firesim initialization (steps 6/7)" + echo " --skip-marshal : Skip firemarshal initialization (steps 8/9)" + echo " --skip-circt : Skip CIRCT install (step 10)" + echo " --skip-clean : Skip repository clean-up (step 11)" exit "$1" } @@ -72,6 +81,24 @@ do --skip | -s) shift SKIP_LIST+=(${1}) ;; + --skip-conda) + SKIP_LIST+=(1) ;; + --skip-submodules) + SKIP_LIST+=(2) ;; + --skip-toolchain) + SKIP_LIST+=(3) ;; + --skip-ctags) + SKIP_LIST+=(4) ;; + --skip-precompile) + SKIP_LIST+=(5 6) ;; + --skip-firesim) + SKIP_LIST+=(6 7) ;; + --skip-marshal) + SKIP_LIST+=(8 9) ;; + --skip-circt) + SKIP_LIST+=(10) ;; + --skip-clean) + SKIP_LIST+=(11) ;; * ) error "invalid option $1" usage 1 ;; @@ -109,8 +136,31 @@ if [ $TOOLCHAIN_TYPE == "esp-tools" ]; then done fi + +####################################### +###### BEGIN STEP-BY-STEP SETUP ####### +####################################### + +# In order to run code on error, we must handle errors manually +set +e; + +function begin_step +{ + thisStepNum=$1; + thisStepDesc=$2; + echo " ========== BEGINNING STEP $thisStepNum: $thisStepDesc ==========" +} +function exit_if_last_command_failed +{ + local exitcode=$?; + if [ $exitcode -ne 0 ]; then + die "Build script failed with exit code $exitcode at step $thisStepNum: $thisStepDesc" $exitcode; + fi +} + # setup and install conda environment if run_step "1"; then + begin_step "1" "Conda environment setup" # note: lock file must end in .conda-lock.yml - see https://github.com/conda-incubator/conda-lock/issues/154 CONDA_REQS=$CYDIR/conda-reqs CONDA_LOCK_REQS=$CONDA_REQS/conda-lock-reqs @@ -120,13 +170,35 @@ if run_step "1"; then if [ "$USE_UNPINNED_DEPS" = true ]; then # auto-gen the lockfiles $CYDIR/scripts/generate-conda-lockfiles.sh + exit_if_last_command_failed fi # use conda-lock to create env - conda-lock install --conda $(which conda) -p $CYDIR/.conda-env $LOCKFILE - - source $CYDIR/.conda-env/etc/profile.d/conda.sh + conda-lock install --conda $(which conda) -p $CYDIR/.conda-env $LOCKFILE && + source $CYDIR/.conda-env/etc/profile.d/conda.sh && conda activate $CYDIR/.conda-env + exit_if_last_command_failed + + # Conda Setup + # Provide a sourceable snippet that can be used in subshells that may not have + # inhereted conda functions that would be brought in under a login shell that + # has run conda init (e.g., VSCode, CI) + read -r -d '\0' CONDA_ACTIVATE_PREAMBLE <<'END_CONDA_ACTIVATE' +if ! type conda >& /dev/null; then + echo "::ERROR:: you must have conda in your environment first" + return 1 # don't want to exit here because this file is sourced +fi + +# if we're sourcing this in a sub process that has conda in the PATH but not as a function, init it again +conda activate --help >& /dev/null || source $(conda info --base)/etc/profile.d/conda.sh +\0 +END_CONDA_ACTIVATE + + replace_content env.sh build-setup-conda "# line auto-generated by $0 +$CONDA_ACTIVATE_PREAMBLE +conda activate $CYDIR/.conda-env +source $CYDIR/scripts/fix-open-files.sh" + fi if [ -z "$FORCE_FLAG" ]; then @@ -138,11 +210,14 @@ fi # initialize all submodules (without the toolchain submodules) if run_step "2"; then + begin_step "2" "Initializing Chipyard submodules" $CYDIR/scripts/init-submodules-no-riscv-tools.sh $FORCE_FLAG + exit_if_last_command_failed fi # build extra toolchain collateral (i.e. spike, pk, riscv-tests, libgloss) if run_step "3"; then + begin_step "3" "Building toolchain collateral" if run_step "1"; then PREFIX=$CONDA_PREFIX/$TOOLCHAIN_TYPE else @@ -153,64 +228,97 @@ if run_step "3"; then PREFIX=$RISCV fi $CYDIR/scripts/build-toolchain-extra.sh $TOOLCHAIN_TYPE -p $PREFIX + exit_if_last_command_failed fi # run ctags for code navigation if run_step "4"; then + begin_step "4" "Running ctags for code navigation" $CYDIR/scripts/gen-tags.sh + exit_if_last_command_failed fi # precompile chipyard scala sources if run_step "5"; then - pushd $CYDIR/sims/verilator - make launch-sbt SBT_COMMAND=";project chipyard; compile" - make launch-sbt SBT_COMMAND=";project tapeout; compile" + begin_step "5" "Pre-compiling Chipyard Scala sources" + pushd $CYDIR/sims/verilator && + make launch-sbt SBT_COMMAND=";project chipyard; compile" && + make launch-sbt SBT_COMMAND=";project tapeout; compile" && popd + exit_if_last_command_failed fi # setup firesim if run_step "6"; then - $CYDIR/scripts/firesim-setup.sh + begin_step "6" "Setting up FireSim" + $CYDIR/scripts/firesim-setup.sh && $CYDIR/sims/firesim/gen-tags.sh + exit_if_last_command_failed # precompile firesim scala sources if run_step "7"; then - pushd $CYDIR/sims/firesim + begin_step "7" "Pre-compiling Firesim Scala sources" + pushd $CYDIR/sims/firesim && ( + set -e # Subshells un-set "set -e" so it must be re enabled echo $CYDIR source sourceme-manager.sh --skip-ssh-setup pushd sim make sbt SBT_COMMAND="project {file:$CYDIR}firechip; compile" TARGET_PROJECT=firesim popd ) + exit_if_last_command_failed popd fi fi # setup firemarshal if run_step "8"; then - pushd $CYDIR/software/firemarshal + begin_step "8" "Setting up FireMarshal" + pushd $CYDIR/software/firemarshal && ./init-submodules.sh + exit_if_last_command_failed # precompile firemarshal buildroot sources if run_step "9"; then - source $CYDIR/scripts/fix-open-files.sh - ./marshal $VERBOSE_FLAG build br-base.json + begin_step "9" "Pre-compiling FireMarshal buildroot sources" + source $CYDIR/scripts/fix-open-files.sh && + ./marshal $VERBOSE_FLAG build br-base.json && ./marshal $VERBOSE_FLAG clean br-base.json + exit_if_last_command_failed fi popd fi -# do misc. cleanup for a "clean" git status if run_step "10"; then - $CYDIR/scripts/repo-clean.sh + # install circt into conda + if run_step "1"; then + PREFIX=$CONDA_PREFIX/$TOOLCHAIN_TYPE + else + if [ -z "$RISCV" ] ; then + error "ERROR: If conda initialization skipped, \$RISCV variable must be defined." + exit 1 + fi + PREFIX=$RISCV + fi + + git submodule update --init $CYDIR/tools/install-circt && + $CYDIR/tools/install-circt/bin/download-release-or-nightly-circt.sh \ + -f circt-full-shared-linux-x64.tar.gz \ + -i $PREFIX \ + -v version-file \ + -x $CYDIR/conda-reqs/circt.json \ + -g null + exit_if_last_command_failed fi -cat <> env.sh -# line auto-generated by $0 -conda activate $CYDIR/.conda-env -source $CYDIR/scripts/fix-open-files.sh -EOT + +# do misc. cleanup for a "clean" git status +if run_step "11"; then + begin_step "10" "Cleaning up repository" + $CYDIR/scripts/repo-clean.sh + exit_if_last_command_failed +fi echo "Setup complete!" diff --git a/scripts/build-toolchain-extra.sh b/scripts/build-toolchain-extra.sh index 049e3424..28cc9dfa 100755 --- a/scripts/build-toolchain-extra.sh +++ b/scripts/build-toolchain-extra.sh @@ -118,4 +118,17 @@ cd tools/DRAMSim2 make libdramsim.so cp libdramsim.so $RISCV/lib/ +echo '==> Installing uart_tsi bringup utility' +cd $RDIR +git submodule update --init generators/testchipip +cd generators/testchipip/uart_tsi +make +cp uart_tsi $RISCV/bin + +echo '==> Installing spike-devices' +cd $RDIR +git submodule update --init toolchains/riscv-tools/riscv-spike-devices +cd toolchains/riscv-tools/riscv-spike-devices +make install + echo "Extra Toolchain Utilities/Tests Build Complete!" diff --git a/scripts/generate-conda-lockfiles.sh b/scripts/generate-conda-lockfiles.sh index f2e81106..544a8281 100755 --- a/scripts/generate-conda-lockfiles.sh +++ b/scripts/generate-conda-lockfiles.sh @@ -13,6 +13,13 @@ fi for TOOLCHAIN_TYPE in riscv-tools esp-tools; do # note: lock file must end in .conda-lock.yml - see https://github.com/conda-incubator/conda-lock/issues/154 LOCKFILE=$REQS_DIR/conda-lock-reqs/conda-requirements-$TOOLCHAIN_TYPE-linux-64.conda-lock.yml + rm -rf $LOCKFILE - conda-lock -f "$REQS_DIR/chipyard.yaml" -f "$REQS_DIR/$TOOLCHAIN_TYPE.yaml" -p linux-64 --lockfile $LOCKFILE + conda-lock \ + --no-mamba \ + --no-micromamba \ + -f "$REQS_DIR/chipyard.yaml" \ + -f "$REQS_DIR/$TOOLCHAIN_TYPE.yaml" \ + -p linux-64 \ + --lockfile $LOCKFILE done diff --git a/scripts/init-submodules-no-riscv-tools-nolog.sh b/scripts/init-submodules-no-riscv-tools-nolog.sh index d15498ea..aa921f0d 100755 --- a/scripts/init-submodules-no-riscv-tools-nolog.sh +++ b/scripts/init-submodules-no-riscv-tools-nolog.sh @@ -157,8 +157,6 @@ if [ ! -f ./software/firemarshal/marshal-config.yaml ]; then echo "firesim-dir: '../../sims/firesim/'" > ./software/firemarshal/marshal-config.yaml fi -cat << EOT >> env.sh -# line auto-generated by init-submodules-no-riscv-tools.sh +replace_content env.sh init-submodules "# line auto-generated by init-submodules-no-riscv-tools.sh __DIR="$RDIR" -PATH=\$__DIR/software/firemarshal:\$PATH -EOT +PATH=\$__DIR/software/firemarshal:\$PATH" diff --git a/scripts/insert-includes.py b/scripts/insert-includes.py index ed6fed73..8262c251 100755 --- a/scripts/insert-includes.py +++ b/scripts/insert-includes.py @@ -1,6 +1,7 @@ #!/usr/bin/env python -# replaces a `include with the full include file +# replaces a `include with the full include file. +# recursively replaces `include's until none are left # # args # $1 - file to remove includes from @@ -12,6 +13,8 @@ import sys import re import os +import tempfile +import shutil inVlog = sys.argv[1] outVlog = sys.argv[2] @@ -24,28 +27,52 @@ if inVlog == outVlog: incDirs = sys.argv[3:] print("[INFO] Searching following dirs for includes: " + str(incDirs)) -# open file -with open(inVlog, 'r') as inFile: - with open(outVlog, 'w') as outFile: - # for each include found, search through all dirs and replace if found, error if not - for num, line in enumerate(inFile, 1): +def process(inF, outF): + # open file + with open(inF, 'r') as inFile: + with open(outF, 'w') as outFile: + # for each include found, search through all dirs and replace if found, error if not + for num, line in enumerate(inFile, 1): + match = re.match(r"^ *`include +\"(.*)\"", line) + if match: + # search for include and replace + found = False + for d in incDirs: + potentialIncFileName = d + "/" + match.group(1) + if os.path.exists(potentialIncFileName): + found = True + with open(potentialIncFileName, 'r') as incFile: + for iline in incFile: + outFile.write(iline) + break + + # must find something to include with + if not found: + sys.exit("[ERROR] Couldn't replace include \"" + str(match.group(1)) + "\" found on line " + str(num)) + else: + outFile.write(line) + +inF = inVlog + +while True: + # create a copy of the input + fd, temp_path = tempfile.mkstemp() + shutil.copy2(inF, temp_path) + + with open(temp_path, 'r') as inFile: + anyIncludes = False + for line in inFile: match = re.match(r"^ *`include +\"(.*)\"", line) if match: - # search for include and replace - found = False - for d in incDirs: - potentialIncFileName = d + "/" + match.group(1) - if os.path.exists(potentialIncFileName): - found = True - with open(potentialIncFileName, 'r') as incFile: - for iline in incFile: - outFile.write(iline) - break + anyIncludes = True + break - # must find something to include with - if not found: - sys.exit("[ERROR] Couldn't replace include \"" + str(match.group(1)) + "\" found on line " + str(num)) - else: - outFile.write(line) + if anyIncludes: + process(temp_path, outVlog) + inF = outVlog + os.remove(temp_path) + else: + os.remove(temp_path) + break print("[INFO] Success. Writing output to: " + str(outVlog)) diff --git a/scripts/replace-content.py b/scripts/replace-content.py new file mode 100755 index 00000000..a20acaa8 --- /dev/null +++ b/scripts/replace-content.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 + +# Replace text in a file given a key identifying a block to replace. +# If the file doesn't exist, create it. +# +# args +# $1 - file to replace text in +# $2 - key used to find block of text to replace +# $3 - text to fill in block that is replaced + +import re +import sys + +def CY_INITIALIZE_RE_BLOCK(k): + return ( + r"^# >>> " + f"{k}" + r" initialize >>>(?:\n|\r\n)" + r"([\s\S]*?)" + r"# <<< " + f"{k}" + r" initialize <<<(?:\n|\r\n)?" + ) + +def CY_INITIALIZE_START_TOKEN(k): + return "# >>> " + f"{k}" + " initialize >>>" + +def CY_INITIALIZE_END_TOKEN(k): + return "# <<< " + f"{k}" + " initialize <<<" + +# ------------------------------ + +try: + with open(sys.argv[1]) as fh: + fh_content = fh.read() +except FileNotFoundError: + fh_content = "" +except: + raise + +initialize_comment_key = sys.argv[2] +inner_contents = CY_INITIALIZE_START_TOKEN(initialize_comment_key) + "\n" + sys.argv[3] + "\n" + CY_INITIALIZE_END_TOKEN(initialize_comment_key) + "\n" + +# ------------------------------ + +replace_str = "__CY_REPLACE_ME_123__" +fh_content = re.sub( + CY_INITIALIZE_RE_BLOCK(initialize_comment_key), + replace_str, + fh_content, + flags=re.MULTILINE, +) +# TODO: maybe remove all but last of replace_str, if there's more than one occurrence +fh_content = fh_content.replace(replace_str, inner_contents) + +if CY_INITIALIZE_START_TOKEN(initialize_comment_key) not in fh_content: + fh_content += "\n%s\n" % inner_contents + +with open(sys.argv[1], "w") as fh: + fh.write(fh_content) diff --git a/scripts/tutorial-patches/build.sbt.patch b/scripts/tutorial-patches/build.sbt.patch index 1e766db9..b64d7a43 100644 --- a/scripts/tutorial-patches/build.sbt.patch +++ b/scripts/tutorial-patches/build.sbt.patch @@ -1,20 +1,20 @@ diff --git a/build.sbt b/build.sbt -index 302d99e6..0aa0fcb4 100644 +index c3be6161..2a6d7160 100644 --- a/build.sbt +++ b/build.sbt -@@ -148,7 +148,7 @@ lazy val testchipip = (project in file("generators/testchipip")) - +@@ -147,7 +147,7 @@ lazy val testchipip = (project in file("generators/testchipip")) + lazy val chipyard = (project in file("generators/chipyard")) - .dependsOn(testchipip, rocketchip, boom, hwacha, sifive_blocks, sifive_cache, iocell, + .dependsOn(testchipip, rocketchip, boom, hwacha, rocketchip_blocks, rocketchip_inclusive_cache, iocell, - sha3, // On separate line to allow for cleaner tutorial-setup patches + //sha3, // On separate line to allow for cleaner tutorial-setup patches dsptools, rocket_dsp_utils, gemmini, icenet, tracegen, cva6, nvdla, sodor, ibex, fft_generator, - constellation, mempress, barf, shuttle) -@@ -220,10 +220,10 @@ lazy val sodor = (project in file("generators/riscv-sodor")) + constellation, mempress, barf, shuttle, caliptra_aes) +@@ -219,10 +219,10 @@ lazy val sodor = (project in file("generators/riscv-sodor")) .settings(libraryDependencies ++= rocketLibDeps.value) .settings(commonSettings) - + -lazy val sha3 = (project in file("generators/sha3")) - .dependsOn(rocketchip, midasTargetUtils) - .settings(libraryDependencies ++= rocketLibDeps.value) @@ -23,6 +23,6 @@ index 302d99e6..0aa0fcb4 100644 +// .dependsOn(rocketchip, midasTargetUtils) +// .settings(libraryDependencies ++= rocketLibDeps.value) +// .settings(commonSettings) - + lazy val gemmini = (project in file("generators/gemmini")) .dependsOn(rocketchip) diff --git a/scripts/uniquify-module-names.py b/scripts/uniquify-module-names.py index d53eb2f0..0ddea49f 100755 --- a/scripts/uniquify-module-names.py +++ b/scripts/uniquify-module-names.py @@ -21,6 +21,7 @@ parser.add_argument("--gcpath", type=str, required=True, help="Path to gen-colla args = parser.parse_args() MODEL_SFX=args.model + "_UNIQUIFIED" +SED=os.environ.get("SED", "sed") def bash(cmd): @@ -109,7 +110,7 @@ def generate_copy(c, sfx): new_file = os.path.join(args.gcpath, new_file) shutil.copy(cur_file, new_file) - bash(f"sed -i s/\"module {cur_name}\"/\"module {new_name}\"/ {new_file}") + bash(f"{SED} -i 's/module\( \+\){cur_name}/module\\1{new_name}/' {new_file}") return new_file def bfs_uniquify_modules(tree, common_fnames, verilog_module_filename): @@ -136,7 +137,7 @@ def bfs_uniquify_modules(tree, common_fnames, verilog_module_filename): new_file = generate_copy(cur_file, MODEL_SFX) if parent is not None and ((parent, mod) not in updated_submodule): parent_file = os.path.join(args.gcpath, verilog_module_filename[parent]) - bash(f"sed -i s/\"{mod} \"/\"{mod}_{MODEL_SFX} \"/ {parent_file}") + bash(f"{SED} -i 's/\( \*\){mod}\( \+\)/\\1{mod}_{MODEL_SFX}\\2/' {parent_file}") updated_submodule.add((parent, mod)) # add the uniquified module to the verilog_modul_filename dict diff --git a/scripts/utils.sh b/scripts/utils.sh index 30d3e092..633be103 100755 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -53,3 +53,27 @@ function restore_bash_options { set +vx; eval "$OLDSTATE" } + +####################################### +# Wrapper around replace-content.py. +# For a file ($1), write out text ($3) into it +# replacing any area designated by $2. +####################################### +function replace_content +{ + # On macOS, use GNU readlink from 'coreutils' package in Homebrew/MacPorts + if [ "$(uname -s)" = "Darwin" ] ; then + READLINK=greadlink + else + READLINK=readlink + fi + + # If BASH_SOURCE is undefined, we may be running under zsh, in that case + # provide a zsh-compatible alternative + DIR="$(dirname "$($READLINK -f "${BASH_SOURCE[0]:-${(%):-%x}}")")" + file="$1" + shift + key="$1" + shift + $DIR/replace-content.py "$file" "$key" "$@" +} diff --git a/sims/firesim b/sims/firesim index 08b565c8..d2501ec7 160000 --- a/sims/firesim +++ b/sims/firesim @@ -1 +1 @@ -Subproject commit 08b565c8c69f125a1de292eb8efe03ee08408d2e +Subproject commit d2501ec790c3df9094cc729c33074b641c515b03 diff --git a/sims/verilator/Makefile b/sims/verilator/Makefile index 73845bc2..e1cf31ef 100644 --- a/sims/verilator/Makefile +++ b/sims/verilator/Makefile @@ -163,8 +163,7 @@ VERILATOR_NONCC_OPTS = \ VERILATOR_CXXFLAGS = \ $(SIM_CXXFLAGS) \ $(RUNTIME_PROFILING_CFLAGS) \ - -DVERILATOR \ - -include $(build_dir)/$(long_name).plusArgs + -DVERILATOR VERILATOR_LDFLAGS = $(SIM_LDFLAGS) @@ -195,13 +194,13 @@ model_mk_debug = $(model_dir_debug)/V$(TB).mk $(model_mk): $(sim_common_files) $(EXTRA_SIM_REQS) rm -rf $(model_dir) mkdir -p $(model_dir) - $(VERILATOR) $(VERILATOR_OPTS) $(EXTRA_SIM_SOURCES) -o $(sim) -Mdir $(model_dir) -CFLAGS "-include $(model_header)" + $(VERILATOR) $(VERILATOR_OPTS) $(EXTRA_SIM_SOURCES) -o $(sim) -Mdir $(model_dir) touch $@ $(model_mk_debug): $(sim_common_files) $(EXTRA_SIM_REQS) rm -rf $(model_dir_debug) mkdir -p $(model_dir_debug) - $(VERILATOR) $(VERILATOR_OPTS) +define+DEBUG $(EXTRA_SIM_SOURCES) -o $(sim_debug) $(TRACING_OPTS) -Mdir $(model_dir_debug) -CFLAGS "-include $(model_header_debug)" + $(VERILATOR) $(VERILATOR_OPTS) +define+DEBUG $(EXTRA_SIM_SOURCES) -o $(sim_debug) $(TRACING_OPTS) -Mdir $(model_dir_debug) touch $@ ######################################################################################### diff --git a/software/baremetal-ide b/software/baremetal-ide new file mode 160000 index 00000000..f488090a --- /dev/null +++ b/software/baremetal-ide @@ -0,0 +1 @@ +Subproject commit f488090a7f37da43610bd5017ee401526bf40fb2 diff --git a/software/firemarshal b/software/firemarshal index 8b8eea35..97826983 160000 --- a/software/firemarshal +++ b/software/firemarshal @@ -1 +1 @@ -Subproject commit 8b8eea35f618b9418c850df7ed809a2285ee5d1c +Subproject commit 97826983438427b8fc40d9b66af2674ce7046bac diff --git a/tests/Makefile b/tests/Makefile index 28976a6a..1c6df31b 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -2,14 +2,14 @@ # RISCV Toolchain ################################# -PREFIX = riscv64-unknown-elf- +TARGET = riscv64-unknown-elf -GCC = $(PREFIX)gcc -CXX = $(PREFIX)g++ -CP = $(PREFIX)objcopy -OBJDUMP = $(PREFIX)objdump -DG = $(PREFIX)gdb -SIZE = $(PREFIX)size +GCC = $(TARGET)-gcc +CXX = $(TARGET)-g++ +CP = $(TARGET)-objcopy +OBJDUMP = $(TARGET)-objdump +DG = $(TARGET)-gdb +SIZE = $(TARGET)-size ################################# @@ -29,7 +29,7 @@ include libgloss.mk PROGRAMS = pwm blkdev accum charcount nic-loopback big-blkdev pingd \ streaming-passthrough streaming-fir nvdla spiflashread spiflashwrite fft gcd \ - hello mt-hello + hello mt-hello symmetric .DEFAULT_GOAL := default diff --git a/tests/blkdev.c b/tests/blkdev.c index 994a341b..b740617c 100644 --- a/tests/blkdev.c +++ b/tests/blkdev.c @@ -59,8 +59,8 @@ void blkdev_write(unsigned long offset, void *addr, size_t nsectors) #define TEST_NSECTORS 4 #define TEST_SIZE (TEST_NSECTORS * BLKDEV_SECTOR_SIZE / sizeof(int)) -unsigned int test_data[TEST_SIZE]; -unsigned int res_data[TEST_SIZE]; +unsigned int test_data[TEST_SIZE] __attribute__ ((aligned (64))); +unsigned int res_data[TEST_SIZE] __attribute__ ((aligned (64))); int main(void) { diff --git a/tests/gcd.c b/tests/gcd.c index 1d8ee691..de28251d 100644 --- a/tests/gcd.c +++ b/tests/gcd.c @@ -1,9 +1,9 @@ #include "mmio.h" -#define GCD_STATUS 0x1000 -#define GCD_X 0x1004 -#define GCD_Y 0x1008 -#define GCD_GCD 0x100C +#define GCD_STATUS 0x4000 +#define GCD_X 0x4004 +#define GCD_Y 0x4008 +#define GCD_GCD 0x400C unsigned int gcd_ref(unsigned int x, unsigned int y) { while (y != 0) { diff --git a/tests/libgloss.mk b/tests/libgloss.mk index 2272df33..5553bdbd 100644 --- a/tests/libgloss.mk +++ b/tests/libgloss.mk @@ -5,6 +5,10 @@ ifndef GCC $(error GCC is not defined) endif +ifndef TARGET +$(error TARGET is not defined) +endif + libgloss_specs := htif_nano.specs # Test whether libgloss-htif is globally installed and usable diff --git a/tests/symmetric.c b/tests/symmetric.c new file mode 100644 index 00000000..a6d37627 --- /dev/null +++ b/tests/symmetric.c @@ -0,0 +1,30 @@ +#include +#include +#include +#include "marchid.h" + +#define OBUS_OFFSET (0x1L << 32) + +char src[] = "This is a test string. It will be written into the off-chip memory address, then copied back."; +char dest[4096]; +char test[4096]; + +int main(void) { + size_t write_start = rdcycle(); + memcpy(dest + OBUS_OFFSET, src, sizeof(src)); + size_t write_end = rdcycle(); + + printf("Wrote %ld bytes in %ld cycles\n", sizeof(src), write_end - write_start); + + size_t read_start = rdcycle(); + memcpy(test, dest + OBUS_OFFSET, sizeof(src)); + size_t read_end = rdcycle(); + + if (memcmp(src, test, sizeof(src))) { + printf("Remote write/read failed\n"); + exit(1); + } + printf("Read %ld bytes in %ld cycles\n", sizeof(src), read_end - read_start); + + return 0; +} diff --git a/toolchains/riscv-tools/riscv-isa-sim b/toolchains/riscv-tools/riscv-isa-sim index 015b4e92..4d8651be 160000 --- a/toolchains/riscv-tools/riscv-isa-sim +++ b/toolchains/riscv-tools/riscv-isa-sim @@ -1 +1 @@ -Subproject commit 015b4e92e3a85f827a54590e00e716b79a2f8e9e +Subproject commit 4d8651be943ea706eb8dcb3443add2e7ccc117a6 diff --git a/toolchains/riscv-tools/riscv-spike-devices b/toolchains/riscv-tools/riscv-spike-devices new file mode 160000 index 00000000..8b4836db --- /dev/null +++ b/toolchains/riscv-tools/riscv-spike-devices @@ -0,0 +1 @@ +Subproject commit 8b4836db0b5b4ed0a9bab34e7707fe40c7c014be diff --git a/tools/barstools b/tools/barstools index f5fe37c4..60a1be9b 160000 --- a/tools/barstools +++ b/tools/barstools @@ -1 +1 @@ -Subproject commit f5fe37c4bf0a37eb5033eeaf930c337895470607 +Subproject commit 60a1be9bfe344fccbddd4874524accb3c9d2ade9 diff --git a/tools/dsptools b/tools/dsptools index 7bd039fb..8f433663 160000 --- a/tools/dsptools +++ b/tools/dsptools @@ -1 +1 @@ -Subproject commit 7bd039fb5f28ce2f31ed4420deb9a2220542838d +Subproject commit 8f4336639578d2e2dbaf61e542ee1f0fa8d79e63 diff --git a/tools/fixedpoint b/tools/fixedpoint index 35dda166..36ce43c9 160000 --- a/tools/fixedpoint +++ b/tools/fixedpoint @@ -1 +1 @@ -Subproject commit 35dda166f58f021cc32d00a2e76a5a33691c2b20 +Subproject commit 36ce43c90ce9cfc63e7698fa1e27fd122c878e9e diff --git a/tools/install-circt b/tools/install-circt new file mode 160000 index 00000000..3f8dda6e --- /dev/null +++ b/tools/install-circt @@ -0,0 +1 @@ +Subproject commit 3f8dda6e1c1965537b5801a43c81c287bac4eae4 diff --git a/tools/rocket-dsp-utils b/tools/rocket-dsp-utils index 341e9198..19445522 160000 --- a/tools/rocket-dsp-utils +++ b/tools/rocket-dsp-utils @@ -1 +1 @@ -Subproject commit 341e91985fdda7cce7eb30566fe58482a6f5aa40 +Subproject commit 194455223aa75f400d2ac76bfd71e61e3c2a9533 diff --git a/variables.mk b/variables.mk index 5d540ea4..705b8955 100644 --- a/variables.mk +++ b/variables.mk @@ -29,8 +29,7 @@ HELP_SIMULATION_VARIABLES = \ " LOADMEM = riscv elf binary that should be loaded directly into simulated DRAM. LOADMEM=1 will load the BINARY elf" \ " LOADARCH = path to a architectural checkpoint directory that should end in .loadarch/, for restoring from a checkpoint" \ " VERBOSE_FLAGS = flags used when doing verbose simulation [$(VERBOSE_FLAGS)]" \ -" timeout_cycles = number of clock cycles before simulator times out, defaults to 10000000" \ -" bmark_timeout_cycles = number of clock cycles before benchmark simulator times out, defaults to 100000000" +" TIMEOUT_CYCLES = number of clock cycles before simulator times out, defaults to 10000000" # include default simulation rules HELP_COMMANDS = \ @@ -97,7 +96,7 @@ ifeq ($(SUB_PROJECT),testchipip) VLOG_MODEL ?= $(MODEL) MODEL_PACKAGE ?= chipyard.unittest CONFIG ?= TestChipUnitTestConfig - CONFIG_PACKAGE ?= testchipip + CONFIG_PACKAGE ?= testchipip.test GENERATOR_PACKAGE ?= chipyard TB ?= TestDriver TOP ?= UnitTestSuite @@ -287,7 +286,7 @@ PERMISSIVE_ON=+permissive PERMISSIVE_OFF=+permissive-off BINARY ?= BINARIES ?= -override SIM_FLAGS += +dramsim +dramsim_ini_dir=$(TESTCHIP_DIR)/src/main/resources/dramsim2_ini +max-cycles=$(timeout_cycles) +override SIM_FLAGS += +dramsim +dramsim_ini_dir=$(TESTCHIP_DIR)/src/main/resources/dramsim2_ini +max-cycles=$(TIMEOUT_CYCLES) VERBOSE_FLAGS ?= +verbose # get_out_name is a function, 1st argument is the binary get_out_name = $(subst $() $(),_,$(notdir $(basename $(1)))) @@ -305,14 +304,20 @@ endif # build output directory for compilation ######################################################################################### # output for all project builds -gen_dir=$(sim_dir)/generated-src +generated_src_name ?=generated-src +gen_dir =$(sim_dir)/$(generated_src_name) # per-project output directory -build_dir=$(gen_dir)/$(long_name) +build_dir =$(gen_dir)/$(long_name) # final generated collateral per-project -GEN_COLLATERAL_DIR ?= $(build_dir)/gen-collateral +GEN_COLLATERAL_DIR ?=$(build_dir)/gen-collateral ######################################################################################### -# assembly/benchmark variables +# simulation variables ######################################################################################### -timeout_cycles = 10000000 -bmark_timeout_cycles = 100000000 +TIMEOUT_CYCLES = 10000000 + +# legacy timeout_cycles handling +timeout_cycles ?= +ifneq ($(timeout_cycles),) +TIMEOUT_CYCLES=$(timeout_cycles) +endif diff --git a/vlsi/Makefile b/vlsi/Makefile index b3901fe6..074ec66a 100644 --- a/vlsi/Makefile +++ b/vlsi/Makefile @@ -42,7 +42,7 @@ HAMMER_EXEC ?= $(if $(filter $(tech_name),sky130),\ ./example-vlsi-sky130,\ ./example-vlsi) VLSI_TOP ?= $(TOP) -VLSI_MODEL_DUT_NAME ?= chiptop +VLSI_MODEL_DUT_NAME ?= chiptop0 # If overriding, this should be relative to $(vlsi_dir) VLSI_OBJ_DIR ?= build ifneq ($(CUSTOM_VLOG),) diff --git a/vlsi/example-designs/sky130-openroad-rockettile.yml b/vlsi/example-designs/sky130-openroad-rockettile.yml index c7300f9b..4a6b664c 100644 --- a/vlsi/example-designs/sky130-openroad-rockettile.yml +++ b/vlsi/example-designs/sky130-openroad-rockettile.yml @@ -22,27 +22,16 @@ vlsi.inputs.placement_constraints: bottom: 10 # Place SRAM memory instances - # SRAM paths and configurations are slightly different due to ENABLE_YOSYS_FLOW flag - # data cache - - path: "RocketTile/dcache/data/data_arrays_0_0/data_arrays_0_0_ext/mem_0_0" + # data cache + - path: "RocketTile/dcache/data/data_arrays_0/data_arrays_0_ext/mem_0_0" type: hardmacro x: 50 y: 50 orientation: r90 - - path: "RocketTile/dcache/data/data_arrays_0_1/data_arrays_0_0_ext/mem_0_0" + - path: "RocketTile/dcache/data/data_arrays_0/data_arrays_0_ext/mem_1_0" type: hardmacro x: 50 - y: 450 - orientation: r90 - - path: "RocketTile/dcache/data/data_arrays_0_2/data_arrays_0_0_ext/mem_0_0" - type: hardmacro - x: 50 - y: 850 - orientation: r90 - - path: "RocketTile/dcache/data/data_arrays_0_3/data_arrays_0_0_ext/mem_0_0" - type: hardmacro - x: 50 - y: 1250 + y: 800 orientation: r90 # tag array @@ -53,7 +42,7 @@ vlsi.inputs.placement_constraints: orientation: r90 # instruction cache - - path: "RocketTile/frontend/icache/data_arrays_0_0/data_arrays_0_0_0_ext/mem_0_0" + - path: "RocketTile/frontend/icache/data_arrays_0_0/data_arrays_0_0_ext/mem_0_0" type: hardmacro x: 50 y: 2100 diff --git a/vlsi/example-designs/sky130-openroad.yml b/vlsi/example-designs/sky130-openroad.yml index 33f01cad..3b95d982 100644 --- a/vlsi/example-designs/sky130-openroad.yml +++ b/vlsi/example-designs/sky130-openroad.yml @@ -54,8 +54,6 @@ vlsi.inputs.placement_constraints: bottom: 10 # Place SRAM memory instances - # SRAM paths and configurations are slightly different due to ENABLE_YOSYS_FLOW flag - # data cache - path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/dcache/data/data_arrays_0_0/data_arrays_0_0_ext/mem_0_0" type: hardmacro x: 50 diff --git a/vlsi/example-sky130.yml b/vlsi/example-sky130.yml index 1cd281f7..1e3faf1c 100644 --- a/vlsi/example-sky130.yml +++ b/vlsi/example-sky130.yml @@ -48,6 +48,11 @@ vlsi.inputs.placement_constraints: x: 50 y: 50 orientation: r90 + - path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/dcache/data/data_arrays_0/data_arrays_0_ext/mem_1_0" + type: hardmacro + x: 50 + y: 800 + orientation: r90 # tag array - path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/frontend/icache/tag_array_0/tag_array_0_ext/mem_0_0" diff --git a/vlsi/power.mk b/vlsi/power.mk index ff1c1729..c006d338 100644 --- a/vlsi/power.mk +++ b/vlsi/power.mk @@ -23,7 +23,7 @@ endif endif echo " start_times: ['0ns']" >> $@ echo " end_times: [" >> $@ - echo " '`bc <<< $(timeout_cycles)*$(CLOCK_PERIOD)`ns'" >> $@ + echo " '`bc <<< $(TIMEOUT_CYCLES)*$(CLOCK_PERIOD)`ns'" >> $@ echo " ]" >> $@ $(POWER_RTL_CONF): $(VLSI_RTL) diff --git a/vlsi/sim.mk b/vlsi/sim.mk index ea2c76d7..f5ff85ff 100644 --- a/vlsi/sim.mk +++ b/vlsi/sim.mk @@ -51,7 +51,11 @@ $(SIM_DEBUG_CONF): $(sim_common_files) check-binary mkdir -p $(dir $@) mkdir -p $(output_dir) echo "sim.inputs:" > $@ - echo " defines: ['DEBUG']" >> $@ + echo " defines:" >> $@ + echo " - 'DEBUG'" >> $@; +ifndef USE_VPD + echo " - 'FSDB=1'" >> $@; +endif echo " defines_meta: 'append'" >> $@ echo " execution_flags:" >> $@ for x in $(VERBOSE_FLAGS) $(call get_waveform_flag,$(call get_sim_out_name,$(BINARY))); do \ @@ -60,7 +64,7 @@ $(SIM_DEBUG_CONF): $(sim_common_files) check-binary echo " execution_flags_meta: 'append'" >> $@ echo " saif.mode: 'time'" >> $@ echo " saif.start_time: '0ns'" >> $@ - echo " saif.end_time: '`bc <<< $(timeout_cycles)*$(CLOCK_PERIOD)`ns'" >> $@ + echo " saif.end_time: '`bc <<< $(TIMEOUT_CYCLES)*$(CLOCK_PERIOD)`ns'" >> $@ ifndef USE_VPD echo " options:" >> $@ echo ' - "-kdb"' >> $@ diff --git a/vlsi/tutorial.mk b/vlsi/tutorial.mk index 6b970fcb..5e57455f 100644 --- a/vlsi/tutorial.mk +++ b/vlsi/tutorial.mk @@ -12,6 +12,7 @@ ifeq ($(tutorial),asap7) TECH_CONF ?= example-asap7.yml DESIGN_CONFS ?= VLSI_OBJ_DIR ?= build-asap7-commercial + INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF) $(DESIGN_CONFS) $(EXTRA_CONFS) endif ifeq ($(tutorial),sky130-commercial) @@ -23,6 +24,7 @@ ifeq ($(tutorial),sky130-commercial) $(if $(filter $(VLSI_TOP),Rocket), \ example-designs/sky130-rocket.yml, ) VLSI_OBJ_DIR ?= build-sky130-commercial + INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF) $(DESIGN_CONFS) $(EXTRA_CONFS) endif ifeq ($(tutorial),sky130-openroad) @@ -36,8 +38,7 @@ ifeq ($(tutorial),sky130-openroad) $(if $(filter $(VLSI_TOP),RocketTile), \ example-designs/sky130-openroad-rockettile.yml, ) VLSI_OBJ_DIR ?= build-sky130-openroad - # Yosys compatibility for CIRCT-generated Verilog, at the expense of elaboration time. + INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF) $(DESIGN_CONFS) $(EXTRA_CONFS) + # Yosys compatibility for CIRCT-generated Verilog ENABLE_YOSYS_FLOW = 1 endif - -INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF) $(DESIGN_CONFS) $(EXTRA_CONFS)