From e1707d7438fbfb41e6f589300daab62a7af331ad Mon Sep 17 00:00:00 2001 From: Quinn Unger Date: Wed, 22 Jul 2026 13:56:13 +0100 Subject: [PATCH] add more cores from the fusesoc-cores repo (#32) --- cores/fusesoc-cores.nix | 464 +++++++++++++++------ cores/patches/swerv_el2_folder_perms.patch | 28 ++ flake.nix | 67 +-- 3 files changed, 401 insertions(+), 158 deletions(-) create mode 100644 cores/patches/swerv_el2_folder_perms.patch diff --git a/cores/fusesoc-cores.nix b/cores/fusesoc-cores.nix index 755ee70..4837261 100644 --- a/cores/fusesoc-cores.nix +++ b/cores/fusesoc-cores.nix @@ -9,134 +9,338 @@ let rev = "df5d895909b4289aab8ba368250a332a3c6970ea"; hash = "sha256-1zNYV6empYAoNkVPgqpGttR38KsHBRU2cxvomafzBsI="; }; + core = coreRoot: coreName: providerHash: { inherit coreName coreRoot providerHash; }; + coresIn = coreRoot: f: f (core coreRoot); in -map (x: fusesocLib.importCore (x // { coreRoot = "${fusesoc-cores}/${x.coreRoot}"; })) [ - { - coreName = "SD-card-controller-0-r3.core"; - coreRoot = "SD-card-controller"; - providerHash = "sha256-C9DiZEIyUIFuhITuxL/RoSThMRo4HJ7dylcWm3TVPn4="; - } - { - coreName = "ac97-1.2-r1.core"; - coreRoot = "ac97"; - providerHash = "sha256-UsFPiuuTzrSfMi4fb2IJKGKdeTM2lpfRsYhb90kOOh4="; - } - { - coreName = "adv_debug_sys-3.1.0-r1.core"; - coreRoot = "adv_debug_sys"; - providerHash = "sha256-t+ffB55laSo7G2qVPuyff0FlWV3tkbt687ESMSozUVc="; - } - { - coreName = "altera_virtual_jtag-1.0-r1.core"; - coreRoot = "altera_virtual_jtag"; - providerHash = "sha256-XzkXUH8BCy8pqzcwvQUdXdX6uz+tEEdvT5d805lwW1c="; - } - { - coreName = "basejump_stl-hard.core"; - coreRoot = "bespoke-silicon-group"; - providerHash = "sha256-ceMgT2imgIBzUA0FKl1zXWuUUjKv8g7ZFmwsBXg4hqE="; - } - { - coreName = "basejump_stl-nonsynth.core"; - coreRoot = "bespoke-silicon-group"; - providerHash = "sha256-ceMgT2imgIBzUA0FKl1zXWuUUjKv8g7ZFmwsBXg4hqE="; - } - { - coreName = "basejump_stl.core"; - coreRoot = "bespoke-silicon-group"; - providerHash = "sha256-ceMgT2imgIBzUA0FKl1zXWuUUjKv8g7ZFmwsBXg4hqE="; - } - { - coreName = "bsg-external-hardfloat.core"; - coreRoot = "bespoke-silicon-group"; - providerHash = "sha256-YN9kzBvnqzDUt12BOK9uus1dTjKd0LXpanyEsbenrMM="; - } - { - coreName = "cdc_utils-0.1-r1.core"; - coreRoot = "cdc_utils"; - providerHash = "sha256-osHfK/tkBepihTaYg/h8wnFFpFDkPedxNp3y/EPZJfc="; - } - # TODO: chipsalliance.org/swerv-el2.core (uses generators) - { - coreName = "ethmac-0.core"; - coreRoot = "ethmac"; - providerHash = "sha256-ojJye+hy3yZu8kkCE4VBModrQKpKsXZp0MWpAB2WGQ4="; - } - { - coreName = "fifo-1.3-r1.core"; - coreRoot = "fifo"; - providerHash = "sha256-nS4mFYccezxeWdvQtiWYoyNvuumRhYXCt2QMsyBhX7E="; - } - { - coreName = "fplib.core"; - coreRoot = "fplib"; - providerHash = "sha256-8Zt4QFq4Z6u8DV/QqMquR74wpehCEpD7Wj/KJDC4uB4="; - } - # TODO: fusesoc_utils/* (generators, scripts) - { - coreName = "i2c-1.14-r1.core"; - coreRoot = "i2c"; - providerHash = "sha256-JVUO5Znh/bqkdbzMRjCcTUrh/HtXf08ArcsQgsQ5X9M="; - } - { - coreName = "i2c-1.15.core"; - coreRoot = "i2c"; - providerHash = "sha256-/zD0g4o2NNZhd6HrgXqvdXhU9Y90cyP+VAsIXQJnQRU="; - } - # TODO: iob_cache/* iob_eth/iob_eth.core iob_uart16550/iob_uart16550.core (scripts) - { - coreName = "jtag_tap-1.13-r1.core"; - coreRoot = "jtag_tap"; - providerHash = "sha256-YYbZguMNRz2Vwxf3uIT75Wp+za+8gXggPxVAy5cjp2M="; - } - { - coreName = "jtag_vpi-r3.core"; - coreRoot = "jtag_vpi"; - providerHash = "sha256-atWzMSY+F02Jx3YfHfcCOru/QZZbS+2HQLhD6UCJ/Kw="; - } - { - coreName = "jtag_vpi-r4.core"; - coreRoot = "jtag_vpi"; - providerHash = "sha256-atWzMSY+F02Jx3YfHfcCOru/QZZbS+2HQLhD6UCJ/Kw="; - } - { - coreName = "jtag_vpi-r5.core"; - coreRoot = "jtag_vpi"; - providerHash = "sha256-cdvzLGsA+C7z/mqN16ZmQDYedB+t81k8SO5vpVV8Cx8="; - } - { - coreName = "mor1kx-5.0-r2.core"; - coreRoot = "mor1kx"; - providerHash = "sha256-i14TGNXeTVfnnNwZQ514arRV95ncpfD5CDE77Mp0Pt4="; - } - { - coreName = "mor1kx-5.1.core"; - coreRoot = "mor1kx"; - providerHash = "sha256-mjWQ/KFxQbxjhI6MDgg8W/aRRobUWncafeaz21Slg10="; - } - { - coreName = "mor1kx-5.2.core"; - coreRoot = "mor1kx"; - providerHash = "sha256-2PMnwymtnCDYuMmlgOEbupqFf2utVYVpeOGz/nWH3ZE="; - } - { - coreName = "ompic-1.0-r1.core"; - coreRoot = "ompic"; - providerHash = "sha256-AR3tu9nuJ7FRAHdxep98S9X1Zjy+xsb0TTUNvlqKszM="; - } - { - coreName = "vlog_tb_utils-1.1-r1.core"; - coreRoot = "vlog_tb_utils"; - providerHash = "sha256-1PInJS4DvhzZ+8h8zpxgewoAzo4mCb7b4OWRh97h3h0="; - } - { - coreName = "verilog-arbiter-r3.core"; - coreRoot = "verilog-arbiter"; - providerHash = "sha256-/hgkOUn7oCSXQXWbUPprC5hpB29KRLjC3Bsz+n7yMVU="; - } - { - coreName = "wiredelay-0-r1.core"; - coreRoot = "wiredelay"; - providerHash = "sha256-pfQwxVUHWteVx1GvI9WXCGzpK9SEGxEbv0dnrxUgbiU="; - } -] + +map (x: fusesocLib.importCore (x // { coreRoot = "${fusesoc-cores}/${x.coreRoot}"; })) ( + [ + # TODO: iob_cache/* iob_eth/iob_eth.core iob_uart16550/iob_uart16550.core (scripts) + # TODO: pulp-platform.org/* (generators) + # TODO: verilog-axis/* (generators) + # TODO: wb_intercon/* (generators) + { + # TODO: generator script has issues with tmp dir + # The core provided by fusesoc-cores is horifically out of date. + coreName = "swerv_el2.core"; + coreRoot = "chipsalliance.org"; + providerHash = "sha256-Q8mAm1g2/2Bh6qvzSrscZ7qPoFophEzEAO9HcG3cr1s="; + preservePaths = [ + "configs/swerv_config_gen.py" + "configs/swerv.config" + ]; + patches = [ ./patches/swerv_el2_folder_perms.patch ]; + } + { + coreName = "SD-card-controller-0-r3.core"; + coreRoot = "SD-card-controller"; + providerHash = "sha256-C9DiZEIyUIFuhITuxL/RoSThMRo4HJ7dylcWm3TVPn4="; + } + { + coreName = "ac97-1.2-r1.core"; + coreRoot = "ac97"; + providerHash = "sha256-UsFPiuuTzrSfMi4fb2IJKGKdeTM2lpfRsYhb90kOOh4="; + } + { + coreName = "adv_debug_sys-3.1.0-r1.core"; + coreRoot = "adv_debug_sys"; + providerHash = "sha256-t+ffB55laSo7G2qVPuyff0FlWV3tkbt687ESMSozUVc="; + } + { + coreName = "altera_virtual_jtag-1.0-r1.core"; + coreRoot = "altera_virtual_jtag"; + providerHash = "sha256-XzkXUH8BCy8pqzcwvQUdXdX6uz+tEEdvT5d805lwW1c="; + } + { + coreName = "cdc_utils-0.1-r1.core"; + coreRoot = "cdc_utils"; + providerHash = "sha256-osHfK/tkBepihTaYg/h8wnFFpFDkPedxNp3y/EPZJfc="; + } + { + coreName = "ethmac-0.core"; + coreRoot = "ethmac"; + providerHash = "sha256-ojJye+hy3yZu8kkCE4VBModrQKpKsXZp0MWpAB2WGQ4="; + } + { + coreName = "fifo-1.3-r1.core"; + coreRoot = "fifo"; + providerHash = "sha256-nS4mFYccezxeWdvQtiWYoyNvuumRhYXCt2QMsyBhX7E="; + } + { + coreName = "fplib.core"; + coreRoot = "fplib"; + providerHash = "sha256-8Zt4QFq4Z6u8DV/QqMquR74wpehCEpD7Wj/KJDC4uB4="; + } + { + coreName = "jtag_tap-1.13-r1.core"; + coreRoot = "jtag_tap"; + providerHash = "sha256-YYbZguMNRz2Vwxf3uIT75Wp+za+8gXggPxVAy5cjp2M="; + } + { + coreName = "ompic-1.0-r1.core"; + coreRoot = "ompic"; + providerHash = "sha256-AR3tu9nuJ7FRAHdxep98S9X1Zjy+xsb0TTUNvlqKszM="; + } + { + coreName = "or1k_bootloaders-0.9.1-r1.core"; + coreRoot = "or1k_bootloaders"; + providerHash = "sha256-0pUzeFdgtmmD1jFmmFoytA3gBwa1fAwAS0diEdTB7ZM="; + } + { + coreName = "or1ksim_trace-1.0.core"; + coreRoot = "or1ksim_trace"; + providerHash = "sha256-VsNYWNcnkJLGy2bnXfjkw/rN5mOfKaMX/3VvcZgSm7s="; + } + { + coreName = "simple_spi-1.6.1.core"; + coreRoot = "simple_spi"; + providerHash = "sha256-YsutC5zMrudc47bKUo19SRVgCcC01CZjO1Xv0TtrjFg="; + } + { + coreName = "stream_utils-1.3-r1.core"; + coreRoot = "stream_utils"; + providerHash = "sha256-yUbiO1GnZFA/p50l3XZMZiK9HffTlsV0lMXTINohhbU="; + } + { + coreName = "timer-1.0-r1.core"; + coreRoot = "timer"; + providerHash = "sha256-lrSe9aSU8RFzCJ8ceWCwTM85tuT5uAD8L/sj6ZBr0uM="; + } + { + coreName = "uart16550-1.5.5-r1.core"; + coreRoot = "uart16550"; + providerHash = "sha256-q4HVNm6mFxPTyqyPGgIJfDCQ0CTB39NboJnwPIxZAfs="; + } + { + coreName = "vlog_tb_utils-1.1-r1.core"; + coreRoot = "vlog_tb_utils"; + providerHash = "sha256-1PInJS4DvhzZ+8h8zpxgewoAzo4mCb7b4OWRh97h3h0="; + } + { + coreName = "wb_altera_ddr_wrapper-0-r1.core"; + coreRoot = "wb_altera_ddr_wrapper"; + providerHash = "sha256-Tqn3DUcDy4CvlUnFqjpMBztZT5lf/X1QkOMCmreEGb4="; + } + { + coreName = "wb_bfm-1.2.1-r1.core"; + coreRoot = "wb_bfm"; + providerHash = "sha256-Yt9tWXlh/BXC5MTZSwIXLsoh4Ts3C85FBtU6wJJEa+U="; + } + { + coreName = "wb_common-1.0.3.core"; + coreRoot = "wb_common"; + providerHash = "sha256-iVxXgP8+l9U/ObOYc/qyNdDYuTWDF0wNA6FA3JEnjdg="; + } + { + coreName = "wb_ram-1.1-r1.core"; + coreRoot = "wb_ram"; + providerHash = "sha256-HuBDkFASijlXykWnDbAwTlc1lBXaGhkf/VdWZWwRIAo="; + } + { + coreName = "wb_streamer-1.1-r1.core"; + coreRoot = "wb_streamer"; + providerHash = "sha256-30/YibL6I3fbOCGdSnmIb7hWShRKcjfdsjV5Xwtd75o="; + } + { + coreName = "wiredelay-0-r1.core"; + coreRoot = "wiredelay"; + providerHash = "sha256-pfQwxVUHWteVx1GvI9WXCGzpK9SEGxEbv0dnrxUgbiU="; + } + ] + ++ (coresIn "bespoke-silicon-group" (get: [ + (get "basejump_stl-hard.core" "sha256-ceMgT2imgIBzUA0FKl1zXWuUUjKv8g7ZFmwsBXg4hqE=") + (get "basejump_stl-nonsynth.core" "sha256-ceMgT2imgIBzUA0FKl1zXWuUUjKv8g7ZFmwsBXg4hqE=") + (get "basejump_stl.core" "sha256-ceMgT2imgIBzUA0FKl1zXWuUUjKv8g7ZFmwsBXg4hqE=") + (get "bsg-external-hardfloat.core" "sha256-YN9kzBvnqzDUt12BOK9uus1dTjKd0LXpanyEsbenrMM=") + ])) + ++ (coresIn "i2c" (get: [ + (get "i2c-1.14-r1.core" "sha256-JVUO5Znh/bqkdbzMRjCcTUrh/HtXf08ArcsQgsQ5X9M=") + (get "i2c-1.15.core" "sha256-/zD0g4o2NNZhd6HrgXqvdXhU9Y90cyP+VAsIXQJnQRU=") + ])) + ++ (coresIn "jtag_vpi" (get: [ + (get "jtag_vpi-r3.core" "sha256-atWzMSY+F02Jx3YfHfcCOru/QZZbS+2HQLhD6UCJ/Kw=") + (get "jtag_vpi-r4.core" "sha256-atWzMSY+F02Jx3YfHfcCOru/QZZbS+2HQLhD6UCJ/Kw=") + (get "jtag_vpi-r5.core" "sha256-cdvzLGsA+C7z/mqN16ZmQDYedB+t81k8SO5vpVV8Cx8=") + ])) + ++ (coresIn "mor1kx" (get: [ + (get "mor1kx-5.0-r2.core" "sha256-i14TGNXeTVfnnNwZQ514arRV95ncpfD5CDE77Mp0Pt4=") + (get "mor1kx-5.1.core" "sha256-mjWQ/KFxQbxjhI6MDgg8W/aRRobUWncafeaz21Slg10=") + (get "mor1kx-5.2.core" "sha256-2PMnwymtnCDYuMmlgOEbupqFf2utVYVpeOGz/nWH3ZE=") + ])) + ++ (coresIn "open-logic/3.1.0" (get: [ + (get "olo_axi.core" "sha256-DaW8AyCm0uFYkJarajC+XKhkHqiW1h6hN/84y7scYGM=") + (get "olo_base.core" "sha256-DaW8AyCm0uFYkJarajC+XKhkHqiW1h6hN/84y7scYGM=") + (get "olo_intf.core" "sha256-DaW8AyCm0uFYkJarajC+XKhkHqiW1h6hN/84y7scYGM=") + (get "olo_quartus_tutorial.core" "sha256-DaW8AyCm0uFYkJarajC+XKhkHqiW1h6hN/84y7scYGM=") + (get "olo_vivado_tutorial.core" "sha256-DaW8AyCm0uFYkJarajC+XKhkHqiW1h6hN/84y7scYGM=") + ])) + ++ (coresIn "open-logic/3.2.0" (get: [ + (get "olo_axi.core" "sha256-3enhuVik79tA+J4VvdneICl4/QEU+QcYKqRLEoFU3r0=") + (get "olo_base.core" "sha256-3enhuVik79tA+J4VvdneICl4/QEU+QcYKqRLEoFU3r0=") + (get "olo_intf.core" "sha256-3enhuVik79tA+J4VvdneICl4/QEU+QcYKqRLEoFU3r0=") + (get "olo_quartus_tutorial.core" "sha256-3enhuVik79tA+J4VvdneICl4/QEU+QcYKqRLEoFU3r0=") + (get "olo_vivado_tutorial.core" "sha256-3enhuVik79tA+J4VvdneICl4/QEU+QcYKqRLEoFU3r0=") + ])) + ++ (coresIn "open-logic/3.3.0" (get: [ + (get "en_cl_fix.core" "sha256-GEMghZ0DAH7AgUh6v+Y5O9iVsa1Y87qqg27HVEEHNhs=") + (get "olo_axi.core" "sha256-hiGJpjfkT8f1OA3DoCstesI2q0UayiAdNK9pkvhkYHo=") + (get "olo_base.core" "sha256-hiGJpjfkT8f1OA3DoCstesI2q0UayiAdNK9pkvhkYHo=") + (get "olo_fix.core" "sha256-hiGJpjfkT8f1OA3DoCstesI2q0UayiAdNK9pkvhkYHo=") + (get "olo_fix_tutorial.core" "sha256-hiGJpjfkT8f1OA3DoCstesI2q0UayiAdNK9pkvhkYHo=") + (get "olo_intf.core" "sha256-hiGJpjfkT8f1OA3DoCstesI2q0UayiAdNK9pkvhkYHo=") + (get "olo_quartus_tutorial.core" "sha256-hiGJpjfkT8f1OA3DoCstesI2q0UayiAdNK9pkvhkYHo=") + (get "olo_vivado_tutorial.core" "sha256-hiGJpjfkT8f1OA3DoCstesI2q0UayiAdNK9pkvhkYHo=") + ])) + ++ (coresIn "open-logic/4.0.0" (get: [ + (get "en_cl_fix.core" "sha256-6VfOKvbP+m3bpF/MLw9yzuP3CwyF5OkbdzGY4vcwPZU=") + (get "olo_axi.core" "sha256-/M0kI/bEtXOQso7xP5Q2lsdRRQph+y2eHz6o3mL3GfI=") + (get "olo_base.core" "sha256-/M0kI/bEtXOQso7xP5Q2lsdRRQph+y2eHz6o3mL3GfI=") + (get "olo_fix.core" "sha256-/M0kI/bEtXOQso7xP5Q2lsdRRQph+y2eHz6o3mL3GfI=") + (get "olo_fix_tutorial.core" "sha256-/M0kI/bEtXOQso7xP5Q2lsdRRQph+y2eHz6o3mL3GfI=") + (get "olo_intf.core" "sha256-/M0kI/bEtXOQso7xP5Q2lsdRRQph+y2eHz6o3mL3GfI=") + (get "olo_quartus_tutorial.core" "sha256-/M0kI/bEtXOQso7xP5Q2lsdRRQph+y2eHz6o3mL3GfI=") + (get "olo_vivado_tutorial.core" "sha256-/M0kI/bEtXOQso7xP5Q2lsdRRQph+y2eHz6o3mL3GfI=") + ])) + ++ (coresIn "open-logic/4.1.0" (get: [ + (get "en_cl_fix.core" "sha256-DoPvgMcYrRM5CKZUyA7iU3lA6/3OjpxqCmzCauEKnIg=") + (get "olo_axi.core" "sha256-h0tb0NxH8qs8bOdVewZdGxm0BNzTGNR+ho7i4ljheLQ=") + (get "olo_base.core" "sha256-h0tb0NxH8qs8bOdVewZdGxm0BNzTGNR+ho7i4ljheLQ=") + (get "olo_fix.core" "sha256-h0tb0NxH8qs8bOdVewZdGxm0BNzTGNR+ho7i4ljheLQ=") + (get "olo_fix_tutorial.core" "sha256-h0tb0NxH8qs8bOdVewZdGxm0BNzTGNR+ho7i4ljheLQ=") + (get "olo_intf.core" "sha256-h0tb0NxH8qs8bOdVewZdGxm0BNzTGNR+ho7i4ljheLQ=") + (get "olo_quartus_tutorial.core" "sha256-h0tb0NxH8qs8bOdVewZdGxm0BNzTGNR+ho7i4ljheLQ=") + (get "olo_vivado_tutorial.core" "sha256-h0tb0NxH8qs8bOdVewZdGxm0BNzTGNR+ho7i4ljheLQ=") + ])) + ++ (coresIn "open-logic/4.2.0" (get: [ + (get "en_cl_fix.core" "sha256-/LKm+fiJW0As+yd+/coJVs5+tOPb0eEKi01y+q9j4Ik=") + (get "olo_axi.core" "sha256-VeM140CZVbPCCDinGsH5oO8AP/VLxjRitZmP4sO1bo0=") + (get "olo_base.core" "sha256-VeM140CZVbPCCDinGsH5oO8AP/VLxjRitZmP4sO1bo0=") + (get "olo_fix.core" "sha256-VeM140CZVbPCCDinGsH5oO8AP/VLxjRitZmP4sO1bo0=") + (get "olo_fix_tutorial.core" "sha256-VeM140CZVbPCCDinGsH5oO8AP/VLxjRitZmP4sO1bo0=") + (get "olo_intf.core" "sha256-VeM140CZVbPCCDinGsH5oO8AP/VLxjRitZmP4sO1bo0=") + (get "olo_quartus_tutorial.core" "sha256-VeM140CZVbPCCDinGsH5oO8AP/VLxjRitZmP4sO1bo0=") + (get "olo_vivado_tutorial.core" "sha256-VeM140CZVbPCCDinGsH5oO8AP/VLxjRitZmP4sO1bo0=") + ])) + ++ (coresIn "open-logic/4.3.0" (get: [ + (get "en_cl_fix.core" "sha256-/LKm+fiJW0As+yd+/coJVs5+tOPb0eEKi01y+q9j4Ik=") + (get "olo_axi.core" "sha256-+qy0Y2qSNa1mbTaGv+dDpGtnUaV/UQoYBoV3YqVD/JI=") + (get "olo_base.core" "sha256-+qy0Y2qSNa1mbTaGv+dDpGtnUaV/UQoYBoV3YqVD/JI=") + (get "olo_fix.core" "sha256-+qy0Y2qSNa1mbTaGv+dDpGtnUaV/UQoYBoV3YqVD/JI=") + (get "olo_fix_tutorial.core" "sha256-+qy0Y2qSNa1mbTaGv+dDpGtnUaV/UQoYBoV3YqVD/JI=") + (get "olo_intf.core" "sha256-+qy0Y2qSNa1mbTaGv+dDpGtnUaV/UQoYBoV3YqVD/JI=") + (get "olo_quartus_tutorial.core" "sha256-+qy0Y2qSNa1mbTaGv+dDpGtnUaV/UQoYBoV3YqVD/JI=") + (get "olo_vivado_tutorial.core" "sha256-+qy0Y2qSNa1mbTaGv+dDpGtnUaV/UQoYBoV3YqVD/JI=") + ])) + ++ (coresIn "open-logic/4.4.0" (get: [ + (get "en_cl_fix.core" "sha256-/LKm+fiJW0As+yd+/coJVs5+tOPb0eEKi01y+q9j4Ik=") + (get "olo_axi.core" "sha256-xMB0iJUPi/4cuOyppNJTwSHV+RGhNGjg8tWwSZ8YNvs=") + (get "olo_base.core" "sha256-xMB0iJUPi/4cuOyppNJTwSHV+RGhNGjg8tWwSZ8YNvs=") + (get "olo_fix.core" "sha256-xMB0iJUPi/4cuOyppNJTwSHV+RGhNGjg8tWwSZ8YNvs=") + (get "olo_fix_tutorial.core" "sha256-xMB0iJUPi/4cuOyppNJTwSHV+RGhNGjg8tWwSZ8YNvs=") + (get "olo_intf.core" "sha256-xMB0iJUPi/4cuOyppNJTwSHV+RGhNGjg8tWwSZ8YNvs=") + (get "olo_quartus_tutorial.core" "sha256-xMB0iJUPi/4cuOyppNJTwSHV+RGhNGjg8tWwSZ8YNvs=") + (get "olo_vivado_tutorial.core" "sha256-xMB0iJUPi/4cuOyppNJTwSHV+RGhNGjg8tWwSZ8YNvs=") + ])) + ++ (coresIn "open-logic/4.4.1" (get: [ + (get "en_cl_fix.core" "sha256-/LKm+fiJW0As+yd+/coJVs5+tOPb0eEKi01y+q9j4Ik=") + (get "olo_axi.core" "sha256-oYXhhqGIZEBm8W11mNmKSJE/hIlXFNBIUgxH0MF4n4Y=") + (get "olo_base.core" "sha256-oYXhhqGIZEBm8W11mNmKSJE/hIlXFNBIUgxH0MF4n4Y=") + (get "olo_fix.core" "sha256-oYXhhqGIZEBm8W11mNmKSJE/hIlXFNBIUgxH0MF4n4Y=") + (get "olo_fix_tutorial.core" "sha256-oYXhhqGIZEBm8W11mNmKSJE/hIlXFNBIUgxH0MF4n4Y=") + (get "olo_intf.core" "sha256-oYXhhqGIZEBm8W11mNmKSJE/hIlXFNBIUgxH0MF4n4Y=") + (get "olo_quartus_tutorial.core" "sha256-oYXhhqGIZEBm8W11mNmKSJE/hIlXFNBIUgxH0MF4n4Y=") + (get "olo_vivado_tutorial.core" "sha256-oYXhhqGIZEBm8W11mNmKSJE/hIlXFNBIUgxH0MF4n4Y=") + ])) + ++ (coresIn "open-logic/4.5.0" (get: [ + (get "en_cl_fix.core" "sha256-/LKm+fiJW0As+yd+/coJVs5+tOPb0eEKi01y+q9j4Ik=") + (get "olo_axi.core" "sha256-U4Rd9Om9GeneignJgxr+DMxQclWMzg0NseSVapWtY3k=") + (get "olo_base.core" "sha256-U4Rd9Om9GeneignJgxr+DMxQclWMzg0NseSVapWtY3k=") + (get "olo_fix.core" "sha256-U4Rd9Om9GeneignJgxr+DMxQclWMzg0NseSVapWtY3k=") + (get "olo_fix_tutorial.core" "sha256-U4Rd9Om9GeneignJgxr+DMxQclWMzg0NseSVapWtY3k=") + (get "olo_intf.core" "sha256-U4Rd9Om9GeneignJgxr+DMxQclWMzg0NseSVapWtY3k=") + (get "olo_quartus_tutorial.core" "sha256-U4Rd9Om9GeneignJgxr+DMxQclWMzg0NseSVapWtY3k=") + (get "olo_vivado_tutorial.core" "sha256-U4Rd9Om9GeneignJgxr+DMxQclWMzg0NseSVapWtY3k=") + ])) + ++ (coresIn "openfpga" (get: [ + (get "sofa-chd.core" "sha256-jkB5+TZscXDqIyw45mpa4QONalfTn05Gzy0CLcavL1s=") + (get "sofa-hd.core" "sha256-jkB5+TZscXDqIyw45mpa4QONalfTn05Gzy0CLcavL1s=") + (get "sofa-qlhd.core" "sha256-jkB5+TZscXDqIyw45mpa4QONalfTn05Gzy0CLcavL1s=") + ])) + ++ (coresIn "verilator_tb_utils" (get: [ + (get "verilator_tb_utils-1.0.core" "sha256-Tiz9+fSxlYl9pTwz61K4StWMqRpoZTnLQ5uizFprg1A=") + (get "verilator_tb_utils-1.1.core" "sha256-oX4xppapcEhxfZOjIUvk+fZCh03+6KT1bej3l8AgRnU=") + ])) + ++ (coresIn "verilog-arbiter" (get: [ + (get "verilog-arbiter-r3.core" "sha256-/hgkOUn7oCSXQXWbUPprC5hpB29KRLjC3Bsz+n7yMVU=") + (get "verilog-arbiter-r2.core" "sha256-CVTdd0BBJDd8Y1FM2JIvIBb3orErjfLa9465tF7uhk0=") + ])) + ++ (coresIn "wb_sdram_ctrl" (get: [ + (get "wb_sdram_ctrl-r3.core" "sha256-owHpJcI2q5xsMRnpyo585T08gGwRzhycmSkpf8niFJk=") + (get "wb_sdram_ctrl-r4.core" "sha256-KQU8Sf0EQrm6XIetbobzr2aCQblhmyh1tdEO1EuT1io=") + ])) + ++ (coresIn "yosys_cells" (get: [ + (get "ecp5-0.8.core" "sha256-DdzoqCsz4z3kVsm8PFupdmdDNpG8d8Hf3dNaogvo5z4=") + (get "ice40-0.7.core" "sha256-mbFqQ+85Y+/XQF/2BczqZkRV86FevRjia1BPRi0cx6A=") + ])) + ++ (coresIn "fusesoc_utils" ( + get: + let + paths016 = { + preservePaths = [ + "chisel.py" + "custom.py" + "gitversion.py" + "icepll.py" + "template/template_generator.py" + "template/templates/constants_pkg_sv.j2" + "template/templates/constants_pkg_vhd.j2" + "template/templates/sdc.j2" + "template/templates/ucf.j2" + ]; + }; + paths013 = { + preservePaths = [ + "custom.py" + "gitversion.py" + "icepll.py" + ]; + }; + pathsBlinky = { + preservePaths = [ "sw/proginfo.py" ]; + }; + in + [ + ((get "generators-0.1.7.core" "sha256-ei2IXefe/RKa77jlZsQQ+/P0lPh2Of4+kqDSBvp9TXU=") // paths016) + ((get "generators-0.1.6.core" "sha256-9BcJLSH1icMgI1vcpzq4oDvT8iHP3TOSRPsrfEdKsrY=") // paths016) + ( + (get "generators-0.1.5.core" "sha256-F3U03hw6wwsKt6vJt/4IAxe5VaNR5CHTqs/sufQZxb0=") + // { + preservePaths = [ + "custom.py" + "gitversion.py" + "icepll.py" + "template/template_generator.py" + "template/templates/constants_pkg_sv.j2" + "template/templates/constants_pkg_vhd.j2" + "template/templates/sdc.j2" + "template/templates/ucf.j2" + ]; + } + ) + ((get "generators-0.1.4.core" "sha256-15FTNPQBrvoL32PK1p4EHji1ZD8vZZ/j1Gg1NdsipFY=") // paths013) + ((get "generators-0.1.3.core" "sha256-qlStZecEKRNFNERk9LcQLS/BVxR6r/rMV1B/JI3xLRg=") // paths013) + ((get "blinky-0.core" "sha256-Fhq93SOpSBi7dB9oC1n0KM2XZFHiEzTsWsVSzBD+j5Y=") // pathsBlinky) + ((get "blinky-1.0.core" "sha256-2UhRJQ3bgv1TRPxOLQj/2Z/4IwO8aA8v+40fbm/MiHk=") // pathsBlinky) + ((get "blinky-1.1.core" "sha256-jUX2mpU0lmmIdf3tkpUrEVc4+kpw+8u01ymGy7bn0k0=") // pathsBlinky) + ] + )) + ++ (coresIn "serv" (get: [ + (get "serv-1.0.2.core" "sha256-Io5xQOURxAmNUQR4QnaL72libSPPg6xq0+8F1IdVlEw=") + (get "serv-1.1.0.core" "sha256-Rm+34mE+ToeLxh4SBtgQ9TnSXn2MP/l7DaOrT+XgF5o=") + (get "servant-1.0.2-r1.core" "sha256-gfgn0J+Jrxb5V+sm3HyWuv32mM3ytr2IoVY23K23ZRI=") + (get "servant-1.0.2.core" "sha256-Io5xQOURxAmNUQR4QnaL72libSPPg6xq0+8F1IdVlEw=") + (get "servant-1.1.0.core" "sha256-Rm+34mE+ToeLxh4SBtgQ9TnSXn2MP/l7DaOrT+XgF5o=") + (get "serving-1.0.2.core" "sha256-Io5xQOURxAmNUQR4QnaL72libSPPg6xq0+8F1IdVlEw=") + (get "serving-1.1.0.core" "sha256-Rm+34mE+ToeLxh4SBtgQ9TnSXn2MP/l7DaOrT+XgF5o=") + ])) +) diff --git a/cores/patches/swerv_el2_folder_perms.patch b/cores/patches/swerv_el2_folder_perms.patch new file mode 100644 index 0000000..84fe01e --- /dev/null +++ b/cores/patches/swerv_el2_folder_perms.patch @@ -0,0 +1,28 @@ +--- a/configs/swerv_config_gen.py 2026-07-21 14:02:09.102790287 +0100 ++++ b/configs/swerv_config_gen.py 2026-07-21 16:20:29.167763696 +0100 +@@ -2,6 +2,7 @@ + from fusesoc.capi2.generator import Generator + import os + import shutil ++import stat + import subprocess + import sys + import tempfile +@@ -28,13 +29,15 @@ + "file_type" : "systemVerilogSource"}}] + + tmp_dir = os.path.join(tempfile.mkdtemp(), 'core') +- shutil.copytree(script_root, tmp_dir) ++ shutil.copytree(script_root, tmp_dir, copy_function=shutil.copyfile) ++ os.chmod(path=os.path.join(tmp_dir, 'configs'), mode=0o777) + + cwd = tmp_dir + + env = os.environ.copy() + env['RV_ROOT'] = tmp_dir +- args = ['configs/swerv.config'] + self.config.get('args', []) ++ os.chmod(path=os.path.join(cwd, 'configs/swerv.config'), mode=stat.S_IRWXU) ++ args = [os.path.join(cwd, 'configs/swerv.config')] + self.config.get('args', []) + rc = subprocess.call(args, cwd=cwd, env=env, stdout=devnull) + if rc: + exit(1) diff --git a/flake.nix b/flake.nix index fb3111c..c993c63 100644 --- a/flake.nix +++ b/flake.nix @@ -37,7 +37,29 @@ let pkgs = nixpkgs.legacyPackages.${system}; inherit (self.packages.${system}) fusesoc; - coreList = pkgs.callPackage ./cores/fusesoc-cores.nix { fusesocLib = fusesoc.lib; }; + coreList = + (pkgs.callPackage ./cores/fusesoc-cores.nix { fusesocLib = fusesoc.lib; }) + ++ (fusesoc.lib.importCores ( + pkgs.fetchFromGitHub { + name = "openrisc-cores-github"; + owner = "openrisc"; + repo = "openrisc-cores"; + rev = "b87ad6a7799c996814200c51a7f58d27ab93818f"; + hash = "sha256-R7KWnrerYV4ZA+NE6z4yWS9fgfKyUxP/LoBB0z0EOk8="; + } + )) + ++ [ + (fusesoc.lib.importCore { + coreName = "elf-loader.core"; + coreRoot = pkgs.fetchFromGitHub { + name = "elf-loader-github"; + owner = "fusesoc"; + repo = "elf-loader"; + rev = "7a8f63ae203cb8eef0cc0b96c52a1056ae2a423e"; + hash = "sha256-ABzox3UanVqTJSuXuT4IEyxYQuvAxCvpzJiuaXZu8Co="; + }; + }) + ]; in { # Flakes that export cores should extend/override legacyPackages.${system}.fusesocCores @@ -55,7 +77,7 @@ let pkg = pkgs.fusesoc.override { python3Packages = pkgs.python3Packages // { - inherit (self.packages.${system}) edalize; + inherit (moppkgs.packages.${system}) edalize; }; }; in @@ -85,35 +107,14 @@ checks = let noVendor = fusesoc.lib.cores."".""; - inherit (fusesoc.lib.cores) bespoke-silicon-group; + inherit (fusesoc.lib) cores; in { - inherit (noVendor) - SD-card-controller - ac97 - altera_virtual_jtag - verilog-arbiter - cdc_utils - ethmac - fplib - jtag_tap - ompic - ; - bsg-basejump_stl-hard = bespoke-silicon-group.basejump_stl.hard; - bsg-basejump_stl-nonsynth = bespoke-silicon-group.basejump_stl.nonsynth; - bsg-basejump_stl-rtl = bespoke-silicon-group.basejump_stl.rtl; - bsg-external-hardfloat = fusesoc.lib.cores.bsg-external.hardfloat."0.0.1"; # original corename is mangled like this - jtag_vpi_0-r3 = noVendor.jtag_vpi."0-r3"; - jtag_vpi_0-r4 = noVendor.jtag_vpi."0-r4"; - jtag_vpi_0-r5 = noVendor.jtag_vpi."0-r5"; - "mor1kx_5.0-r2" = noVendor.mor1kx."5.0-r2"; - "mor1kx_5.1" = noVendor.mor1kx."5.1"; - "mor1kx_5.2" = noVendor.mor1kx."5.2"; - # Runnable testbenches - # SD-card-controller-lint = noVendor.SD-card-controller.run.lint.withTools [ pkgs.verilator ]; - # ac97-sim = noVendor.ac97.run.sim.withTools [ pkgs.iverilog ]; + inherit (self.packages.${system}) default; + + # Runnable flows ethmac-lint = noVendor.ethmac.run.lint.withTools [ pkgs.verilator ]; - adv_debug_sys = noVendor.adv_debug_sys.run.jsp_tb.withTools [ pkgs.iverilog ]; + adv_debug_sys-jsp_tb = noVendor.adv_debug_sys.run.jsp_tb.withTools [ pkgs.iverilog ]; inherit ((noVendor.fifo.withTools [ pkgs.iverilog ]).run) fifo_fwft_tb dual_clock_fifo_tb @@ -121,6 +122,16 @@ ; "i2c_1.15-sim" = noVendor.i2c."1.15".run.sim.withTools [ pkgs.iverilog ]; "i2c_1.14-r1-sim" = noVendor.i2c."1.14-r1".run.sim.withTools [ pkgs.iverilog ]; + servant-tinyfpga_bx = noVendor.servant.run.tinyfpga_bx.withTools [ + pkgs.icestorm + pkgs.yosys + pkgs.nextpnr + ]; + blinky-tinyfpga_bx = cores.fusesoc.utils.blinky.run.tinyfpga_bx.withTools [ + pkgs.icestorm + pkgs.yosys + pkgs.nextpnr + ]; }; } ); -- 2.51.2