如何使用Verilog生成随机数

这篇具有很好参考价值的文章主要介绍了如何使用Verilog生成随机数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模块目的:生成随机数。

模块端口定义

输入:时钟信号,复位信号,重新加载信号,种子

输出:随机数

输入一个种子32位,输出16位随机数;选取时钟,复位,重新加载种子。

代码实现

// 使用32个逻辑单元用于D触发器/加法器和8个DSP块用于32x18=>32位乘法

module c_rand (

  input clk,         // 时钟输入

  input rst,         // 复位输入

  input reseed,      // 重新种子输入

  input [31:0] seed_val,  // 种子值输入

  output [15:0] out   // 16位随机数输出

);

  wire [15:0] out;    // 输出端口

 

  reg [31:0] state;   // 内部状态寄存器

  always @(posedge clk or posedge rst) begin

    if (rst)          // 如果复位信号被激活,将状态寄存器state重置为0

      state <= 0;

    else begin

      if (reseed)     // 如果重新种子信号被激活,将状态寄存器state更新为输入的种子值seed_val

        state <= seed_val;

      else begin

        // 使用C运行时库的随机数生成算法更新状态寄存器state

        state <= state * 32'h343fd + 32'h269EC3;

      end

    end

  end

  // 输出随机数是状态寄存器的高16位,并对结果进行位与运算,仅保留低15位(15:0)

  assign out = (state >> 16) & 16'h7fff;

endmodule文章来源地址https://www.toymoban.com/news/detail-767969.html

测试文件:

Tb文件

`timescale 1ns / 1ps

module rand_test ();

reg clk, rst, reseed;

wire [15:0] out;

reg [31:0] seed_val;

c_rand c (.clk(clk),.rst(rst),.reseed(reseed),.seed_val(seed_val),.out(out));

initial begin

       rst = 0;

       clk = 0;

       seed_val = 32'd1234;

       #10 rst = 1;

       #10 rst = 0;

       #10 reseed = 1;

end

//-----命令行打印生成的随机数-----------

always @(negedge clk) begin

  reseed = 0;

  $display ("%x",out);

end

//----时钟翻转间隔----

always begin

       #1000 clk = ~clk; 

end

endmodule

到了这里,关于如何使用Verilog生成随机数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【安全密钥】对基尔霍夫-洛-约翰逊噪声(KLJN)安全密钥交换协议的统计随机数生成器攻击(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2024年04月12日
    浏览(43)
  • 【Java】Java如何生成随机数?

    我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。Random 单词本身就是随机、随意、任意的意思。Random 是一个普通

    2024年02月12日
    浏览(32)
  • Unity如何生成随机数(设置种子)

    我们可以使用Random类来生成一些随机数 Random类是用于生成随机数的类之一。它可以用于生成不同类型的随机数,如整数、浮点数和向量。 我们可以使用Random.Range来生成指定范围内的随机整数或浮点数。下面举两个例子: 运行结果如下所示: 使用Random.insideUnitCircle来获取一个

    2024年02月04日
    浏览(33)
  • 你知道如何生成随机数吗?(超详细附图)

    目录 😉前言 🍸如何用C语言实现随机数 🍹随机数原理 🍹rand函数(生成随机数) 🍹srand(避免每次运行程序产生的随机数都相同) 🍹时间戳 🥤time函数 🍸来个小小项目 🍸代码实现 🍹1.漂亮的主页 🍹2.游戏开关 🍹3.game()函数的代码实现。 🍹4.完整代码 手把手教你

    2024年02月08日
    浏览(25)
  • Java如何生成随机数?要不要了解一下!

    我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。 Random 单词本身就是随机、随意、任意的意思。 Random 是一个普

    2024年02月06日
    浏览(38)
  • 你知道C语言中随机数是如何生成的吗~?

    目录 1.你听说过函数rand的吗? 2.引入srand函数~ 3.time函数的使用~ 4.随机数的实现! 5. 如何控制随机数的范围呢~ 6.这时候我们就可以写出一些比较有趣的代码啦~  7.对我们说的一些话~                            不是每个人都能做自己想做的事,成为自己想成为的人。  

    2024年02月22日
    浏览(34)
  • 使用java.security.SecureRandom安全生成随机数和随机字符串工具类

            在Java中,可以使用java.security.SecureRandom和java.util.Random类来生成随机数,但是它们之间有以下区别:         1、随机性强度: SecureRandom 类提供了更高的随机性强度。它使用了更安全的算法和种子生成器,以提供更高质量的随机数。这对于需要高度安全性的应用程

    2024年04月26日
    浏览(31)
  • Unity 中的随机数的基础常用的随机数生成方法

    在 Unity 中,可以使用 Random 类来生成随机数。以下是一些常用的随机数生成方法: Random.Range(min, max):生成一个在[min, max)范围内的随机整数。 Random.value:生成一个在[0, 1)范围内的随机浮点数。 Random.insideUnitCircle:生成一个在单位圆内的随机二维向量。 Random.insideUnitSphere:生成

    2024年02月20日
    浏览(41)
  • JS - 生成随机数的方法汇总(不同范围、类型的随机数)

    (1)使用 random() 方法可以返回一个介于 0 ~ 1 之间的伪随机数(包括 0,不包括 1)。 (2)下面是一个测试样例 (1)这种最简单,因为和 random 的特点保持一致。只需使用如下公式即可: (2)比如下面生成 [10,15) 范围内的随机浮点数。 因为 random 的特点,要取得这几个区间

    2023年04月08日
    浏览(37)
  • java生成随机数

       bound 必须是正数。 以下代码生成的是 0 到 30 的随机数。 生成区间的随机数:[最小值,最大值] 学的不是技术,更是梦想!!!

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包