Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Release.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# OneWare.CologneChip

## Release 0.7.1
- nextpnr support (OSSCAD Suite needed)
- Global and project support for changing the toolchain
- Fixed some bugs
- Removed Release 0.7 from the oneware-extension.json (faulty version)

## Release 0.7
- Update Dependencies for OW Studio Version 21.4.0

Expand Down
2 changes: 1 addition & 1 deletion oneware-extension.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
]
},
{
"version": "0.7",
"version": "0.7.1",
"targets": [
{
"target": "all"
Expand Down
38 changes: 34 additions & 4 deletions src/OneWare.CologneChip/CologneChipLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using OneWare.UniversalFpgaProjectSystem.Models;
using OneWare.UniversalFpgaProjectSystem.Parser;
using OneWare.UniversalFpgaProjectSystem.Services;
using Prism.Ioc;
using ILogger = OneWare.Essentials.Services.ILogger;

namespace OneWare.CologneChip;
Expand Down Expand Up @@ -111,8 +112,19 @@ public async Task DownloadAsync(UniversalFpgaProjectRoot project)

var state = GetProgrammerState(properties);

var toolchain = settingsService.GetSettingValue<string>(CologneChipConstantService.ToolChainSettingsKey);
var bitStreamPath = "";
switch (toolchain)
{
case "p_r":
bitStreamPath = $"{CologneChipConstantService.Instance.GetBuildPath(project.RelativePath)}{topName}_00.cfg.bit";
break;
case "nextpnr":
bitStreamPath = $"{CologneChipConstantService.Instance.GetBuildPath(project.RelativePath)}{topName}.bit";
break;
}

List<string> fpgaArgs = [];
var bitStreamPath = $"{CologneChipConstantService.Instance.GetBuildPath(project.RelativePath)}{topName}_00.cfg.bit";

switch (state)
{
Expand Down Expand Up @@ -151,9 +163,12 @@ public async Task DownloadAsync(UniversalFpgaProjectRoot project)
throw new Exception("IllegalState");
}

if (!useWsl) {

await childProcessService.ExecuteShellAsync("openFPGALoader", fpgaArgs,
if (!useWsl)
{
// C:\Users\sebas\OneWareStudio\Packages\NativeTools\colognechip\cc-toolchain-win
var execPath = ResolveOpenFPGALoaderPath(project);

await childProcessService.ExecuteShellAsync(execPath, fpgaArgs,
outputDir, "Running OpenFPGALoader (Short-Term)...", AppState.Loading, true);
}
else
Expand All @@ -165,4 +180,19 @@ await childProcessService.ExecuteShellAsync("wsl", args,
outputDir, "Running openFPGALoader (Short-Term)...", AppState.Loading, true);
}
}

protected virtual string ResolveOpenFPGALoaderPath(UniversalFpgaProjectRoot project)
{
var src = ContainerLocator.Container.Resolve<CcSettingsService>()
.GetSetting(CologneChipConstantService.YosysSourceSettingsKey, project);

if (src == "CologneChip")
{
var path = settingsService.GetSettingValue<string>(CologneChipConstantService.CcPathSetting);
var p = $"{path}/bin/openFPGALoader/openFPGALoader";
logger.Log($"openFPGALoader exec path: {p}");
return p;
}
return "openFPGALoader";
}
}
3 changes: 2 additions & 1 deletion src/OneWare.CologneChip/OneWare.CologneChip.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Version>0.7</Version>
<Version>0.7.1</Version>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
Expand All @@ -17,6 +17,7 @@
<ItemGroup>
<PackageReference Include="OneWare.Essentials" Version="0.11.7" Private="false" ExcludeAssets="runtime;Native" />
<PackageReference Include="OneWare.UniversalFpgaProjectSystem" Version="0.41.8" Private="false" ExcludeAssets="runtime;Native" />
<PackageReference Include="OneWare.GhdlExtension" Version="0.11.1" Private="true" ExcludeAssets="runtime;Native"/>
</ItemGroup>

<Target Name="GenerateCompatibilityFile" AfterTargets="Build">
Expand Down
61 changes: 56 additions & 5 deletions src/OneWare.CologneChip/OneWareCologneChipModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
using Avalonia.Controls;
using Avalonia.Layout;
using Avalonia.Markup.Xaml.Styling;
using Avalonia.Media;
using CommunityToolkit.Mvvm.Input;
using OneWare.CologneChip.Helpers;
using OneWare.CologneChip.Services;
using OneWare.CologneChip.ViewModels;
using OneWare.CologneChip.Views;
using OneWare.Essentials.Helpers;
using OneWare.Essentials.Models;
using OneWare.Essentials.Services;
using OneWare.Essentials.ViewModels;
Expand All @@ -22,7 +22,13 @@ public class OneWareCologneChipModule : IModule
{
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<CologneChipService>();
containerRegistry.RegisterSingleton<CcProprietaryCompileStrategy>();
containerRegistry.RegisterSingleton<CcNextpnrCompileStrategy>();
containerRegistry.RegisterSingleton<CcSettingsService>();
containerRegistry.RegisterSingleton<CcUtilsService>();

containerRegistry.RegisterSingleton<ICcCustomLogger, CcCustomLogger>();
}

public void OnInitialized(IContainerProvider containerProvider)
Expand Down Expand Up @@ -84,6 +90,15 @@ public void OnInitialized(IContainerProvider containerProvider)
settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.CcPathSetting,
new FolderPathSetting("CologneChip Toolchain Path", defaultCologneChipPath, null, null, IsCologneChipPathValid));

settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.ToolChainSettingsKey,
new ComboBoxSetting("Place & Route", CologneChipConstantService.ToolChainDefault, CologneChipConstantService.Toolchains));

settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.OpenFPGALoaderSourceSettingsKey,
new ComboBoxSetting("openFPGALoader Source", CologneChipConstantService.OpenFPGALoaderSourceDefault, CologneChipConstantService.BinarySources));

settingsService.RegisterSetting("Tools", "CologneChip", CologneChipConstantService.YosysSourceSettingsKey,
new ComboBoxSetting("Yosys Source", CologneChipConstantService.OpenFPGALoaderSourceDefault, CologneChipConstantService.BinarySources));

settingsService.GetSettingObservable<string>(CologneChipConstantService.CcPathSetting).Subscribe(x =>
{
if (string.IsNullOrEmpty(x)) return;
Expand All @@ -98,16 +113,43 @@ public void OnInitialized(IContainerProvider containerProvider)
var pr = Path.Combine(x, "bin/p_r");
var openFpgaLoader = Path.Combine(x, "bin/openFPGALoader");

ContainerLocator.Container.Resolve<IEnvironmentService>().SetPath("CC_yosys", yosys);
// ContainerLocator.Container.Resolve<IEnvironmentService>().SetPath("CC_yosys", yosys);
ContainerLocator.Container.Resolve<IEnvironmentService>().SetPath("CC_p_r", pr);
ContainerLocator.Container.Resolve<IEnvironmentService>().SetPath("CC_openFPGALoader", openFpgaLoader);
// ContainerLocator.Container.Resolve<IEnvironmentService>().SetPath("CC_openFPGALoader", openFpgaLoader);
});

var projectSettingsService = containerProvider.Resolve<IProjectSettingsService>();
projectSettingsService.AddProjectSetting(new ProjectSettingBuilder()
.WithSetting(new ComboBoxSetting("Place & Route", CologneChipConstantService.ProjectOverrideValue,
CologneChipConstantService.ToolchainsProject))
.WithCategory("CologneChip")
.WithKey(CologneChipConstantService.ToolChainSettingsKey)
.Build());

projectSettingsService.AddProjectSetting(new ProjectSettingBuilder()
.WithSetting(new ComboBoxSetting("openFPGALoader Source",
CologneChipConstantService.ProjectOverrideValue,
CologneChipConstantService.BinarySourcesProject))
.WithCategory("CologneChip")
.WithKey(CologneChipConstantService.OpenFPGALoaderSourceSettingsKey)
.Build());

projectSettingsService.AddProjectSetting(new ProjectSettingBuilder()
.WithSetting(new ComboBoxSetting("Yosys Source",
CologneChipConstantService.ProjectOverrideValue,
CologneChipConstantService.BinarySourcesProject))
.WithCategory("CologneChip")
.WithKey(CologneChipConstantService.YosysSourceSettingsKey)
.Build());

containerProvider.Resolve<ISettingsService>().RegisterSetting("Tools", "CologneChip",
CologneChipConstantService.CologneChipSettingsIgnoreGuiKey, new CheckBoxSetting("Ignore UI for HardwarePin Mapping", false));

containerProvider.Resolve<ISettingsService>().RegisterSetting("Tools", "CologneChip",
CologneChipConstantService.CologneChipSettingsIgnoreSynthExitCode, new CheckBoxSetting("Ignore an exit code not equal to 0 after the synthesis", false));

containerProvider.Resolve<ISettingsService>().RegisterSetting("Tools", "CologneChip",
CologneChipConstantService.AutoDownloadBinariesKey, new CheckBoxSetting("Auto Download Binaries", true));



Expand Down Expand Up @@ -141,7 +183,16 @@ public void OnInitialized(IContainerProvider containerProvider)
Command = new AsyncRelayCommand(async () =>
{
// await projectExplorerService.SaveOpenFilesForProjectAsync(root);
await cologneChipService.PRAysnc(root, new FpgaModel(fpga!));
await cologneChipService.PrAysnc(root, new FpgaModel(fpga!));
}, () => fpga != null)
},
new MenuItem()
{
Header = "Run Packing",
Command = new AsyncRelayCommand(async () =>
{
// await projectExplorerService.SaveOpenFilesForProjectAsync(root);
await cologneChipService.PackAysnc(root, new FpgaModel(fpga!));
}, () => fpga != null)
},
}
Expand All @@ -154,7 +205,7 @@ private static bool IsCologneChipPathValid(string path)
{
if (!Directory.Exists(path)) return false;

if (!File.Exists(Path.Combine(path, "bin", "VERSION"))) return false;
if (!File.Exists(Path.Combine(path, "VERSION"))) return false;
if (!Directory.Exists(Path.Combine(path, "bin", "yosys"))) return false;
if (!Directory.Exists(Path.Combine(path, "bin", "p_r"))) return false;
if (!Directory.Exists(Path.Combine(path, "bin", "openFPGALoader"))) return false;
Expand Down
Loading
Loading