当前位置: 首页 > news >正文

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (八)使用generate…for语句简化代码

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (八)使用generate…for语句简化代码


🔈声明:
😃博主主页:王_嘻嘻的CSDN博客
🧨未经作者允许,禁止转载
🔑系列专栏:牛客Verilog习题集
🚩推荐一个IC、FPGA新手入门的好网站:👉快 点 击 进 入 学 习 吧


  继续整理牛客网经典Verilog习题讲解,牛客网里除了最新的Verilog题库还有其它领域的经典笔试、面试题,大家快和我一起刷起来吧 点 击 跳 转



题目


  在某个module中包含了很多相似的连续赋值语句,请使用generata…for语句编写代码,替代该语句,要求不能改变原module的功能。


module template_module( 
    input [7:0] data_in,
    output [7:0] data_out
);
    assign data_out [0] = data_in [7];
    assign data_out [1] = data_in [6];
    assign data_out [2] = data_in [5];
    assign data_out [3] = data_in [4];
    assign data_out [4] = data_in [3];
    assign data_out [5] = data_in [2];
    assign data_out [6] = data_in [1];
    assign data_out [7] = data_in [0];
    
endmodule

分析:

  本题主要是考察Verilog中如何使用循环来简化代码。在Verilog中循环的使用会比软件语言稍稍麻烦一些,需要额外有一个generate——endgenerate的语句块,所有的for循环需要写在块内generate内的循环变量需要用genvar额外声明

  generate的功能其实就是复制,将同样的电路复制多份,不论是always块或者assign组合逻辑,都可以在generate中

  此外,在每个for循环后最好使用begin:loop_name(自定义),给循环取一个名字,避免后期lint报错的问题。




题解:


`timescale 1ns/1ns
module gen_for_module( 
    input [7:0] data_in,
    output [7:0] data_out
);

generate
    genvar i;
    for(i=0;i<8;i=i+1)begin: loop
        assign data_out[i] = data_in[7-i];
    end
endgenerate

endmodule


相关文章:

  • 上海企业做网站/广州关于进一步优化疫情防控措施
  • 学校网站建设规划书/上海推广外包
  • 徐州app开发/系统优化助手
  • 做网站15年/互联网营销师考证多少钱
  • 做网站需要学习哪些/站长之家域名查询
  • 怎么用路由器做网站/怎么注册网站免费的
  • 【寒假每日一题】洛谷 P8254 [NOI Online 2022 入门组] 王国比赛
  • 【SpringBoot 学习】52、SpringBoot 使用 grpc 实现远程服务调用
  • [激光原理与应用-64]:激光器-器件 - 光电二极管
  • MyBatis 详解 (1) -- 环境搭建、查询操作
  • 深度学习——长短期记忆网络LSTM(笔记)
  • ROS2机器人编程简述humble-第二章-DEVELOPING THE FIRST NODE .2
  • libtorch c++ 使用预训练权重(以resnet为例)
  • 10.1 概述
  • Spark 核心编程
  • 【C/C++无聊练手(四)】用C++模板写一个带迭代器的树状数组,用于求前缀和
  • springboot整合Freemarker模板引擎
  • 进程调度模块