diff --git a/flist/project/top_BEHAV.flist b/flist/project/top_BEHAV.flist index 6e5bb4e167ba5e728bb04782bd4d19bf04edf055..307228751f0ca052b5171061b1c7581fc8673f38 100644 --- a/flist/project/top_BEHAV.flist +++ b/flist/project/top_BEHAV.flist @@ -32,6 +32,7 @@ -f $(SOCLABS_MEGASOC_TECH_DIR)/flist/megasoc_tech_BEHAV.flist $(SOCLABS_PROJECT_DIR)/megasoc_chip/chip/logical/megasoc_chip.v +$(SOCLABS_PROJECT_DIR)/megasoc_chip/chip/logical/megasoc_chip_pin_mux.v $(SOCLABS_PROJECT_DIR)/megasoc_chip/pads/glib/logical/megasoc_chip_pads.v $(SOCLABS_PROJECT_DIR)/megasoc_system/logical/megasoc_system.v diff --git a/megasoc_chip/chip/logical/megasoc_chip.v b/megasoc_chip/chip/logical/megasoc_chip.v index 575960ca8a3c991e2c6bfb3618ea403d5efd1e72..3df3d6a04ffb5563b476ab932fa0482a99a07262 100644 --- a/megasoc_chip/chip/logical/megasoc_chip.v +++ b/megasoc_chip/chip/logical/megasoc_chip.v @@ -46,10 +46,29 @@ module megasoc_chip( output wire TDO, output wire nTDOEN, output wire SWDO, - output wire SWDOEN + output wire SWDOEN, + input wire [15:0] PAD_P0_IN, + output wire [15:0] PAD_P0_OUT, + output wire [15:0] PAD_P0_EN, + output wire [15:0] PAD_P0_FUNC, + + input wire [15:0] PAD_P1_IN, + output wire [15:0] PAD_P1_OUT, + output wire [15:0] PAD_P1_EN, + output wire [15:0] PAD_P1_FUNC ); +wire [15:0] SOC_P0_IN; +wire [15:0] SOC_P0_OUT; +wire [15:0] SOC_P0_EN; +wire [15:0] SOC_P0_FUNC; +wire [15:0] SOC_P1_IN; +wire [15:0] SOC_P1_OUT; +wire [15:0] SOC_P1_EN; +wire [15:0] SOC_P1_FUNC; + + megasoc_system u_megasoc_system( .CLK_IN(CLK_IN), .RT_CLK(RT_CLK), @@ -80,7 +99,35 @@ megasoc_system u_megasoc_system( .TDO(TDO), .nTDOEN(nTDOEN), .SWDO(SWDO), - .SWDOEN(SWDOEN) + .SWDOEN(SWDOEN), + + .P0_IN(SOC_P0_IN), + .P0_OUT(SOC_P0_OUT), + .P0_EN(SOC_P0_EN), + .P0_FUNC(SOC_P0_FUNC), + .P1_IN(SOC_P1_IN), + .P1_OUT(SOC_P1_OUT), + .P1_EN(SOC_P1_EN), + .P1_FUNC(SOC_P1_FUNC) +); + +megasoc_chip_pin_mux u_pin_mux( + .SOC_P0_IN(), + .SOC_P0_OUT(), + .SOC_P0_EN(), + .SOC_P0_FUNC(), + .SOC_P1_IN(), + .SOC_P1_OUT(), + .SOC_P1_EN(), + .SOC_P1_FUNC(), + .PAD_P0_IN(PAD_P0_IN), + .PAD_P0_OUT(PAD_P0_OUT), + .PAD_P0_EN(PAD_P0_EN), + .PAD_P0_FUNC(PAD_P0_FUNC), + .PAD_P1_IN(PAD_P1_IN), + .PAD_P1_OUT(PAD_P1_OUT), + .PAD_P1_EN(PAD_P1_EN), + .PAD_P1_FUNC(PAD_P1_FUNC) ); endmodule \ No newline at end of file diff --git a/megasoc_chip/chip/logical/megasoc_chip_pin_mux.v b/megasoc_chip/chip/logical/megasoc_chip_pin_mux.v new file mode 100644 index 0000000000000000000000000000000000000000..ce7d83edfede584dce7fd63c31504ddc62d156ea --- /dev/null +++ b/megasoc_chip/chip/logical/megasoc_chip_pin_mux.v @@ -0,0 +1,37 @@ +module megasoc_chip_pin_mux ( + output wire [15:0] SOC_P0_IN, + input wire [15:0] SOC_P0_OUT, + input wire [15:0] SOC_P0_EN, + input wire [15:0] SOC_P0_FUNC, + input wire [15:0] SOC_P0_ALT, + + output wire [15:0] SOC_P1_IN, + input wire [15:0] SOC_P1_OUT, + input wire [15:0] SOC_P1_EN, + input wire [15:0] SOC_P1_FUNC, + input wire [15:0] SOC_P1_ALT, + + + input wire [15:0] PAD_P0_IN, + output wire [15:0] PAD_P0_OUT, + output wire [15:0] PAD_P0_EN, + output wire [15:0] PAD_P0_FUNC, + + input wire [15:0] PAD_P1_IN, + output wire [15:0] PAD_P1_OUT, + output wire [15:0] PAD_P1_EN, + output wire [15:0] PAD_P1_FUNC +); + + +genvar i; +generate + for(i=0;i<16;i=i+1) begin + assign PAD_P0_OUT[i] = (PAD_P0_FUNC[i]==1'b1) ? SOC_P0_ALT[i] : SOC_P0_OUT[i]; + assign PAD_P1_OUT[i] = (PAD_P1_FUNC[i]==1'b1) ? SOC_P1_ALT[i] : SOC_P1_OUT[i]; + end +endgenerate + + + +endmodule \ No newline at end of file diff --git a/megasoc_system/logical/megasoc_system.v b/megasoc_system/logical/megasoc_system.v index 8e9b6f9c32f1e9184f2289a87540c588f13dd404..90c517e243dffcc394eaee0f6640e4e5b6c5366b 100644 --- a/megasoc_system/logical/megasoc_system.v +++ b/megasoc_system/logical/megasoc_system.v @@ -47,9 +47,17 @@ module megasoc_system( output wire TDO, output wire nTDOEN, output wire SWDO, - output wire SWDOEN + output wire SWDOEN, + input wire [15:0] P0_IN, + output wire [15:0] P0_OUT, + output wire [15:0] P0_EN, + output wire [15:0] P0_FUNC, + input wire [15:0] P1_IN, + output wire [15:0] P1_OUT, + output wire [15:0] P1_EN, + output wire [15:0] P1_FUNC ); @@ -338,7 +346,16 @@ megasoc_tech_wrapper u_megasoc_tech_wrapper( .TDO(TDO), .nTDOEN(nTDOEN), .SWDO(SWDO), - .SWDOEN(SWDOEN) + .SWDOEN(SWDOEN), + + .P0_IN(P0_IN), + .P0_OUT(P0_OUT), + .P0_EN(P0_EN), + .P0_FUNC(P0_FUNC), + .P1_IN(P1_IN), + .P1_OUT(P1_OUT), + .P1_EN(P1_EN), + .P1_FUNC(P1_FUNC) ); diff --git a/megasoc_tech b/megasoc_tech index f5b712ffd8904d574843f35766af3627e8665049..5a1f4b462dd547ce59a1e2c396105b95a8410354 160000 --- a/megasoc_tech +++ b/megasoc_tech @@ -1 +1 @@ -Subproject commit f5b712ffd8904d574843f35766af3627e8665049 +Subproject commit 5a1f4b462dd547ce59a1e2c396105b95a8410354