尝试保留他人的代码
摘要
本文描述了 CRC Generator(一个用于生成 Verilog/VHDL CRC 代码的命令行工具)以及 Julia Desmazes 在 GitHub 上对其所做的归档,以保存 Evgeni Stavinov 最初编写的工具。
查看缓存全文
缓存时间: 2026/05/26 15:55
Essenceia/CRC_generator
来源: https://github.com/Essenceia/CRC_generator
用于 Verilog 或 VHDL 的 CRC 生成器
描述
CRC 生成器是一个命令行应用程序,能够生成任意数据宽度(1 到 1024)和多项式宽度(1 到 1024)的 Verilog 或 VHDL 代码。该工具使用 C 语言编写,支持跨平台运行。
构建
在 Linux 下使用 gcc 构建:
bash g++ -o crc_gen crc_gen.cpp
使用方法
通过命令行调用工具:
bash ./crc_gen [language] [data_width] [poly_width] [poly_string]
参数说明:
language:verilog或vhdldata_width:数据总线宽度 {1..1024}poly_width:多项式宽度 {1..1024}poly_string:描述 CRC 多项式的字符串,例如:以太网 MAC FCS 使用的多项式04C11DB7
关于 poly_string 的说明
示例:
05 = x^5+x^2+1
8005 = x^{16} + x^{15}+ x^2+ 1
字符串表示形式(0x05、0x8005)不包含多项式表示中的最高次项系数(上述例子中的 x^5 和 x^{16})。
输出示例
打印用法: `` ./crc_gen
用法: crc-gen language data_width poly_width poly_string
参数: language : verilog 或 vhdl data_width : 数据总线宽度 {1..1024} poly_width : 多项式宽度 {1..1024} poly_string : 十六进制表示的多项式字符串
示例:usb crc5 = x^5+x^2+1 crc-gen verilog 8 5 05
``
实际生成: `` ./crc_gen verilog 2 4 3
//—————————————————————————– // Copyright (C) 2009 OutputLogic.com // This source file may be used and distributed without restriction // provided that this copyright statement is not removed from the file // and that any derivative work contains the original copyright notice // and the associated disclaimer. // THIS SOURCE FILE IS PROVIDED “AS IS” AND WITHOUT ANY EXPRESS // OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED // WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. //—————————————————————————– // CRC module for // data[1:0] // crc[3:0]=1+x^1+x^4; // module crc( input [1:0] data_in, input crc_en, output [3:0] crc_out, input rst, input clk);
reg [3:0] lfsr_q,
lfsr_c;
assign crc_out = lfsr_q;
always @(*) begin
lfsr_c[0] = lfsr_q[2] ^ data_in[0];
lfsr_c[1] = lfsr_q[2] ^ lfsr_q[3] ^ data_in[0] ^ data_in[1];
lfsr_c[2] = lfsr_q[0] ^ lfsr_q[3] ^ data_in[1];
lfsr_c[3] = lfsr_q[1];
end // always
always @(posedge clk, posedge rst) begin
if(rst) begin
lfsr_q <= {4{1'b1}};
end
else begin
lfsr_q <= crc_en ? lfsr_c : lfsr_q;
end
end // always
endmodule // crc ``
存档版本
此仓库是当前位于 SourceForge(https://sourceforge.net/projects/crc-gen-verilog/)上版本的镜像,在此处复制以便更好地保护此工具以用于未来。我,Julia Desmazes,未以任何方式参与此工具的开发,所有荣誉归原作者所有。
除了作为命令行工具外,该工具曾经还可以通过现已关闭的 OutputLogic 网站(https://web.archive.org/web/20240716185145/http://outputlogic.com/?page_id=321)以交互方式使用。 screenshot
关于原作者
Evgeni Stavinov 是 OutputLogic.com(https://web.archive.org/web/20240718180127/http://outputlogic.com/)的创建者和主要开发者。Evgeni 在 FPGA 逻辑设计、嵌入式软件和通信协议领域拥有超过 20 年的多样化设计经验。他拥有南加州大学电气工程硕士学位和以色列理工学院电气工程学士学位。如需更多信息,请联系 [email protected]
许可证
此代码根据 MIT 许可证授权,所有权利归 Evgeni Stavinov 所有。详见 LICENSE。
相似文章
回归构建模块的构建模块
本文类比了C/C++中的安全漏洞与Verilog中的安全漏洞,指出硬件描述语言的设计导致了缺陷,并认为行业应投资于更安全的替代方案,类似于软件领域对内存安全编程语言的推动。
使用并行Claude团队构建C编译器
Anthropic研究员展示了如何使用16个并行Claude实例自主构建一个基于Rust的C编译器,该编译器能够编译Linux内核。文章详细介绍了这一多智能体自主编码实验的架构、成本和经验教训。
我用 Vibe Coding 写了一个让工程师在 GitHub 上关注的东西
作者宣布了 iai-mcp,这是一款专为 Claude Code 设计的本地记忆工具,能够跨会话保留上下文。作者还反思了该项目在 GitHub 发布后收到的积极社区反馈以及随之而来的快速迭代。
组合合成:通过原子分解与重组扩展代码RLVR
介绍原子分解与重组(ADR),一种通过分解和重组原子元素来生成新颖且具有挑战性的可验证代码任务的框架,从而为大型语言模型实现可扩展的基于可验证奖励的强化学习。
Verilog-Evolve: 反馈驱动与技能演进的Verilog生成
Verilog-Evolve 是一个反馈驱动的框架,通过迭代优化大型语言模型生成的 Verilog 代码,利用功能仿真、综合和时序指标促进更优候选方案的选出,并跨任务演进可复用的修复技能。