【问题标题】:How to get permutation with LFSR in Verilog如何在 Verilog 中使用 LFSR 进行排列
【发布时间】:2013-12-29 04:36:42
【问题描述】:

我在 Verilog 方面相对缺乏经验,并且对 LFSR 结构非常陌生。我想要完成的工作如下..

如果我有一个 5 字节数组,这意味着最大排列为 5!或 120. 我想做的是, 有办法快速返回这个数组的任何排列。如果我将数组初始化为(0,1,2,3,4),那么对于这 5 个深度数组, 排列 0 产生数组 (1,2,3,4,0)。排列 40 产生数组 (4,0,3,2,1) 等。

所以我认为 LFSR 是完成此任务的最快方法,并且我了解它们的工作原理,但我无法完全了解 抽头应该是什么或如何获得特定的排列。

reg [4:0] vals;
wire feedback
assign feedback = vals[0] ^ vals[1] ^ vals[2] ^ vals[3] ^ vals[4];

always@(posedge clk or negedge reset) begin
 if (reset==1'b0) begin
  vals[4:0]<=5'hF;  //reset condition first
 end 
 else begin
  vals[0]<=feedback;
  vals[1]<=vals[0];
  vals[2]<=vals[1];
  vals[3]<=vals[2];
  vals[4]<=vals[3];
 end

很明显,反馈是行不通的!我只是试图让整个上下文直接进入我的大脑。我如何让它去某个 排列?根据数组的大小,需要多少个抽头?非常感谢任何帮助!

【问题讨论】:

  • '5字节数组'是指5位数组吗?

标签: permutation verilog


【解决方案1】:

你在这里要求的没有意义。除非您已经做出了一些重要的见解并且尚未阐明,否则我认为没有任何方法可以使用 LFSR 来生成排列。正确配置的 LFSR 将生成一个最大长度的输出位序列(通过循环遍历所有可能的内部状态,但其中一个可能的内部状态除外),但该序列与排列没有明显关系。 (状态的数量当然根本不匹配;LFSR 有2^n - 1 状态,但排列有n! 状态。)

查看有关排列生成的数学文献(例如,计算机编程艺术中的 Knuth 的“Generating All Permutations”)可能在这里有用。

【讨论】:

  • 我认为您可以使用 LFSR 生成长度为 2 的幂的排列。对于任意长度,创建一个长度大于长度的 2 的最小幂。由于 LFSR 每次都可以生成相同的伪随机序列,我认为可以编造一个正确类型的反馈函数来产生任何给定的排列。如果不是,什么结构最适合这个目的?
  • 实际上是 2 减 1 的幂,因为 LFSR 的全 1 或全零状态都是一个固定点。无论如何,虽然使用 LFSR 生成排列是一个创造性的想法,但我看不到任何明显的方法来实现它。这当然没有在文献中得到证实。
【解决方案2】:

我写了一个Q&A style on implementing an LFSR 可能有用。特别是关于选择分接点的部分。

根据我的经验,LFSR 用于硬件随机序列或不需要高级加密时的抖动,它们只是白噪声源。

由于它们用于随机性,它们会不断重复相同的序列,但并非旨在按需提供位 y。虽然您可以只提供 64 个正时钟边沿来获得第 64 位(序列)。

【讨论】:

  • 感谢摩根的洞察力。您关于实现 LFSR 的文章当然很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多