尝试维护他人的代码
Trying to preserve other peoples code

原始链接: https://github.com/Essenceia/CRC_generator/tree/main

CRC Generator 是一款由 C 语言编写的跨平台命令行工具,可自动生成用于 CRC 模块的 Verilog 或 VHDL 代码。它支持数据宽度和多项式宽度从 1 到 1024 位。用户只需指定目标语言、数据总线宽度、多项式宽度以及多项式的十六进制表示(不含最高次项系数)即可。 该工具最初由 OutputLogic.com 的 Evgeni Stavinov 开发,目前通过镜像仓库进行维护,以确保其得以保留。它采用 MIT 许可证,为 FPGA 设计中实现基于硬件的 CRC 校验提供了一种灵活且高效的方法。在 Linux 系统下,用户可以使用 `g++` 编译源码,并通过命令行输入特定配置参数来运行该工具。

```Hacker News 新动态 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 努力保存他人的代码 (github.com/essenceia) 7 分,random__duck 发布于 1 小时前 | 隐藏 | 过往 | 收藏 | 2 条评论 pimlottc 22 分钟前 [–] 链接里的代码与“保存他人的代码”(如标题所示)有什么关系? 回复 jfim 21 分钟前 | 父评论 [–] 存档版本 此代码仓库是目前 SourceForge 上该版本的镜像,在此处复制是为了协助将该工具保存到未来。本人 Julia Desmazes 未以任何方式参与此工具的开发,所有功劳均属于原作者。除了作为命令行工具外,该工具过去还曾通过现已关闭的 OutputLogic 网站提供交互式功能。 回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索: ```
相关文章

原文

CRC Generator is a command-line application that generates Verilog or VHDL code for CRC of any data width between 1 and 1024 and polynomial width between 1 and 1024. The code is written in C and is cross-platform compatible.

To build on linux using gcc:

g++ -o crc_gen crc_gen.cpp

Invoke the tool via command line:

./crc_gen [language] [data_width] [poly_width] [poly_string]

Options:

  • language: verilog or vhdl
  • data_width: data bus width ${1..1024}$
  • poly_width: polynomial width ${1..1024}$
  • poly_string: a string that describes CRC polynomial, eg: Ethernet MAC FCS uses poly 04C11DB7

Examples:
$05 = x^5+x^2+1$
$8005 = x^{16} + x^{15}+ x^2+ 1$

The string representation (0x05, 0x8005) doesn’t include highest degree coefficient in polynomial representation ($x^5$ and $x^{16}$ in the above examples).

Printing usage:

./crc_gen

usage:
	crc-gen language data_width poly_width poly_string

parameters:
	language    : verilog or vhdl
	data_width  : data bus width {1..1024}
	poly_width  : polynomial width {1..1024}
	poly_string : polynomial string in hex

example: usb crc5 = x^5+x^2+1
	crc-gen verilog 8 5 05

Generation in action:

./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 

This repository is a mirror of the version currently found on source forge, duplicated here in an effort to no help preserve this tool into the future. I, Julia Desmazes, have not contributed in any way to the development of this tool, all credit belongs to the original author.

In addition to being a command line tool, this tool also used to be available interactively though the now defuncts OutputLogic website.
screenshot

About the original author

Evgeni Stavinov is the creator and main developer of OutputLogic.com. Evgeni has more than 20 years of diverse design experience in the areas of FPGA logic design, embedded software and communication protocols. He holds MSEE from University of Southern California and BSEE from Technion – Israel Institute of Technology. For more information contact [email protected]

This code is licensed under MIT license, all rights reserved to Evgeni Stavinov. See LICENSE for more details.

联系我们 contact @ memedata.com