要查看可以使用SILICE完成的内容,请结帐示例项目(所有这些都在此回购中提供)。
重要提示:最新变更发生在WIP(正在进行的工作)和草案分支机构中,检查出来享受最新功能。阅读更多关于发展分支机构的信息。
siliice简化了FPGA上的原型化算法。它提供了一个舒适但薄的抽象以上Verilog(典型的硬件描述语言),简化了设计而不会对硬件进行精确控制。它提供"生活质量"分组信号的功能,定义通用接口和电路,实例化块RAM,描述管道,处理多个时钟域并自动管理Flip-flops.it给出(可选)将您的设计的部分写为操作序列,子程序可以调用,并使用诸如虽然和中断的控制流语句,描述并行运行的操作和算法,精确地in sync.silice检测组合循环以及许多其他错误易于易因的情况,并具有启用高级的Lua-pre处理器代码生成。
Silien并不旨在成为一个高水平的合成语言:它仍然靠近硬件,让您充分利用FPGA架构,并对您的设计如何映射到硬件的粒度控制:您仍然控制每个和每个和每个架构每个时钟周期,具有可预测的流量控制规则,如何以及当执行状态出现如何以及何时,如何触发器映射到变量以及被注册的内容。事实上,如果你选择了你可以以与Verilog非常相似的方式设计,同时仍然受益于"生活质量" SILICE语法的改进允许从概念中优化初始原型来实现高效实现.SILICE与Verilog编译和互操作:您可以直接实例化并与现有模块绑定。
该语言具有完整的构建系统,许多示例和基本组件(VGA,HDMI,OLED,UART和SDRAM控制器)。构建系统允许轻松开始,并且已经支持许多热门电路板,如破冰船,ULX3S,FOMU和ICESTICK。
您不需要使用FPGA来开始使用SILIC:设计和它们的输出(例如VGA信号)可以模拟和可视化。 Silice与开源FGPA Toolchain(Yosys / NextPNR / ICEStorm)一起工作,请参阅ICE40和ECP5示例。
虽然我为自己的需求开发了愚蠢,但我希望你' ll找到它的项目很有用!
Siliel不抽象硬件:程序员仍然控制并非常接近硬件功能。它提供了简化设计和重用(信号组,通用界面,流水线)的句法助手。 SILICE也可以帮助您在执行流程和操作序列方面推理。但是,这不是强制性的,您也可以完全控制并使用更直接的硬件设计风格。使用SILIES开发时,您可以将优化努力集中在关键部件上,并在设计的其他部分使用更简单的方法。
清洁,简单的语法,清楚地暴露了运营流程以及所花费的时钟周期的流程。
可选的流量控制面向设计风格(自动FSM生成),自然地集成在设计中:虽然,断裂,子程序。
自动考虑为变量创建触发器,具有自动修剪(例如const或绑定)。
Fire-V项目是一种具有RV32I处理器的图形RISCV框架,主要依赖于非顺序构造。
1算法主要(输出UINT8 LED){2 UINT28计数器= 0; // A 28位无符号整数3 LED:=计数器[20,8]; // LED使用8个最高有效位4的每个时钟更新了(1){// forever 5计数器=计数器+ 1; //增量计数器6} 7}
第1行是任何SILIES硬件的入口点:主要算法。第2行We Definea 28位无符号int,初始化为0.初始化器是强制性的,始终是常用项.Line 3我们请求输出LED跟踪计数器变量的八个最高有效位。语法[20,8]表示8位从位20开始。分配给LEDUSES:=运算符是一个始终分配:LED现在在每个上升时钟后用计数器自动地自动化。这样的分配必须在任何其他指令之前出现算法的顶部。
最后,第4-6行定义了递增计数器的无限循环。当然,28位计数器最终将溢出并返回到0,因此循环LED灯模式。在这种情况下,循环采取恰好一个循环执行:我们每次激励为50 MHz(Mojo v3的时钟频率)的一个增量)。
然后我们用siliice编写。 -f参数表示要使用的框架:这是ANFPGA Plateform相关包装代码。在这里,我们仅使用Mojo框架与LED。提供其他框架,很容易写自己。
-O参数指示编写Verilog输出的位置。在此示例中,我们覆盖了预先存在的项目的主文件,然后使用Xilinx ISE Toolchain编译.Fear不是,我们还有与Yosys,NextPNR和Project Icestorm一起使用的示例!
1算法main(){2 brom int12 sintbl [4096] = {...} 3 ... 4(1){//渲染循环5 //获取cos / sin视图6 sintbl。 Addr =(VieeAngle)& 4095; 7 ++:8 SINVIEW = SINTBL。 rdata; 9 Sintbl。 Addr =(VieeAngle + 1024)& 4095; 10 ++:11 cosview = sintbl。 rdata; 12 ...
此代码在块ROM中存储正弦表,并访问它以获取当前视图角度的余弦和正弦。注意:++:步进操作员在第7行和10中。这明确地分割了exectutuct流程并介绍一个循环延迟,这里等待BROM输出其结果在addr.anything中的Select地址的字段RDATA中的结果被认为是组合;例如,在硬件上并行评估线8和9,因为它们产生两片独立电路。
请参阅“入门指南”。愚蠢在Windows,Linux和MacOS上运行很好!要开始编写编写代码,请参阅编写您的第一个设计。查看可以使用SILICE完成的内容,结帐我们的示例项目(所有在此回购中提供)。
siliel已经用于从一个小型RISC-V处理器到整个游戏渲染循环(访问示例页面)的非琐碎的设计。
然而,Siliel正在积极发展。 我决定打开回购,所以每个人都可以加入乐趣,但它远非完整:文件缺乏,一些例子已经过时或远远抛光,一些非常重要的语言功能丢失,并且存在许多知名问题(头 到问题页面)。 我有信心我可以避免主要的代码破坏语法变化,但可能需要一些调整。 我希望你'仍然喜欢潜入它,并会发现它很有用。 请告诉我您的想法:欢迎意见和捐款! 项目包含许多演示项目(参见其中的自述文件)以及为几个板构建脚本 工具包含对SiliUs开发的工具,源或二进制表单(要安装,请参阅入门)