有个前一节的设计规范,现在我们通过看电路图写出对应的Verilog代码。

一、简单模块设计

(1)任务说明

(2)代码实现:

功能分析:输出两数相乘的结果。

图中是一个D触发器和乘法器的组合,可以通过组合逻辑+时序逻辑结合来实现。也可以只在时序逻辑中实现。

module mul_module(clk    ,rst_n  ,//其他信号,举例doutmul_a  ,mul_b  ,mul_result );//参数定义parameter      A_W =   4;parameter      B_W =   3;parameter      R_W = A_W + B_W;//输入信号定义input               clk    ;input               rst_n  ;input [A_W-1:0]     mul_a  ;input [B_W-1:0]     mul_b  ;//输出信号定义output[R_W-1:0]     mul_result;//输出信号reg定义reg   [R_W-1:0]     mul_result;//中间信号定义reg   [R_W-1:0]     mul_result_tmp;//组合逻辑写法/*always@(*)beginmul_result_tmp = mul_a * mul_b;endalways@(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginmul_result <= 0;endelse beginmul_result <= mul_result_tmp;endend*///时序逻辑写法always@(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginmul_result <= 0;endelse beginmul_result <= mul_a * mul_b;endendendmodule

二、简单模块设计

(1)电路图

(2)代码实现

功能分析:自加一

图中有一个加法器(组合逻辑实现)、一个D触发器(时序逻辑实现)。

module module_name(
clk    ,
rst_n  ,
//其他信号
out
);//参数定义
parameter      DATA_W =        4;//输入信号定义
input               clk    ;
input               rst_n  ;//输出信号定义
output[DATA_W-1:0]  out   ;//输出信号reg定义
reg   [DATA_W-1:0]  out   ;//中间信号定义
reg   [DATA_W-1:0]  out_temp;//组合逻辑写法
always@(*)beginout_temp = out+1'b1;
end//时序逻辑写法
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)beginout<=0;
end
else beginout<=out_temp;
end
endendmodule

三、复杂模块设计

(2)代码实现

功能分析:与运算+选择器+实例化

从输出部分开始写代码:

两个寄存器变量的D触发器(时序)--》实例化模块(带参数)--》选择器(组合)--》寄存器变量的D触发器+与运行(时序)每个模块都在一个always块里去设计。

时序还是组合很清晰。

module mul2port(clk    ,rst_n  ,//其他信号,举例doutdin_a  ,din_b  ,din_c  ,din_d  ,sel_a  ,sel_b  ,result_a,result_b);//参数定义parameter      A_W =     3;parameter      B_W =     2;parameter      C_W =     4;parameter      R_A_W =   7;parameter      R_B_W =   6;//输入信号定义input               clk    ;input               rst_n  ;input [A_W-1:0]     din_a  ;input [B_W-1:0]     din_b  ;input [C_W-1:0]     din_c  ;input [C_W-1:0]     din_d  ;input               sel_a  ;input               sel_b  ;//输出信号定义output[R_A_W-1:0]   result_a   ;output[R_B_W-1:0]   result_b   ;//输出信号reg定义reg   [R_A_W-1:0]   result_a   ;reg   [R_B_W-1:0]   result_b   ;//中间信号定义reg   [R_A_W-1:0]   result_a_tmp;reg   [R_B_W-1:0]   result_b_tmp;reg   [C_W  -1:0]   sel_dout    ;reg                 sel         ;always@(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginresult_a <= 0;endelse beginresult_a <= result_a_tmp;endendalways@(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginresult_b <= 0;endelse beginresult_b <= result_b_tmp;endendmul_module  #(.A_W(A_W),.B_W(C_W)) mul_4_3(.clk       (clk       ),.rst_n     (rst_n     ),.mul_a     (din_a     ),.mul_b     (sel_dout  ),.mul_result(result_a_tmp) );mul_module  #(.A_W(B_W),.B_W(C_W)) mul_4_2(.clk       (clk       ),.rst_n     (rst_n     ),.mul_a     (din_b     ),.mul_b     (sel_dout  ),.mul_result(result_b_tmp) );   always@(*)beginif(sel)sel_dout = din_c;elsesel_dout = din_d;endalways@(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginsel <= 1'b0;endelse beginsel <= sel_a && sel_b;endendendmodule

FPGA学习(第5节)-看电路图写出Verilog代码(乘法运算+自加一+模块实例化等)相关推荐

  1. 如何写出“简单“代码?

    如何写出"简单"代码? 当你做实际开发中,你一定会发现有人跟你说,或者你在网上看:要写简单代码要写简单代码.    这句话其实就跟大家熟悉的设计模式中的简单(kiss)原则是挂钩的 ...

  2. 优雅的写出 JavaScript 代码

    目录 前言 避免使用 js 糟粕和鸡肋 编写简洁的 JavaScript 代码 使用 ES6/ES7 新特性 Babel ESLint Prettier 采用函数式编程 优雅的敲 JS 代码的几个原则 ...

  3. java 拼 变量名_你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码

    本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效 ...

  4. 大厂秘籍:谷歌代码规范开放下载,手把手教你写出好代码

    这两天和一位大厂的朋友聊天,说起他们今年技术岗晋级答辩要增加代码走读环节,那该如何写出好看又好用的代码? 代码是程序员改变世界的工具,每个程序员都会写代码,但不一定能写出好代码. 如今的大型商业软件系 ...

  5. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...

    如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...

  6. idea代码提示插件_IDEA 插件推荐 —— 让你写出好代码的神器!

    概述 今天介绍的插件主要是围绕编码规范的.有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」. 代码静态检查是有很多种类,例如圈复杂度.重复率等.业界提供了很多静态检查的插件来识别这些不合规 ...

  7. 写出漂亮代码的七种方法

    首先我想说明我本文阐述的是纯粹从美学的角度来写出代码,而非技术.逻辑等.以下为写出漂亮代码的七种方法: 1.尽快结束 if 语句 例如下面这个JavaScript语句,看起来就很恐怖:  functi ...

  8. 写出漂亮代码的45个小技巧

    不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的兄弟. ...

  9. 如何写出高性能代码(二)巧用数据特性

    导语 同一份逻辑,不同人的实现的代码性能会出现数量级的差异: 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升:同一份代码,也可能在不同处理器上运行也会有几倍的性能差异:十倍程序 ...

最新文章

  1. 【CSS】CSS前期回顾(2)
  2. Go语言(二)—基本概述
  3. SpringMVC_day1
  4. django.db.utils.OperationalError: (1049, Unknown database 'djangodb')
  5. CentOS安装tengine(淘宝服务器)
  6. linux 运行级别,linux执行流程 /etc/rc.d/init.d目录理解
  7. android 按钮变形动画,android-动画切换按钮
  8. 微软 Access数据库操作 中文教程
  9. JPEG 推荐的DC和AC系数的huffman(哈夫曼)码表
  10. 手机端输入框默认打开手机数字键盘
  11. 动态规划算法解Travelling Salesman Problem(TSP)问题
  12. IOS 改变导航栏颜色
  13. numpy中的ndarray方法和属性
  14. telnet测试136邮箱imap服务器
  15. 数睿数据的四域模型(软件=数据+形式)源何引发强烈关注?
  16. k型热电偶材料_k型热电偶工作原理及详细参数
  17. 内存颗粒和闪存颗粒的区别_闪存颗粒到底是何物?浅析闪存及制程
  18. c语言中转向的指针,C语言指针碎碎念
  19. mysql 时间盲注语句,sql注入学习记录(5)-基于时间延迟的SQL盲注
  20. JavaScript编程精粹

热门文章

  1. python批量将excel转成pdf_使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
  2. 全球三大设计奖之一“IDEA奖”公布,富士无反数码相机X100V获铜奖
  3. 【图像增强】人工多重曝光融合AMEF图像去雾【含Matlab源码 1916期】
  4. 马云:每个人都把我当靶子 已2个多月没去总部
  5. 臻色调女装品牌女装:专家为你揭开神秘面纱
  6. java个人通讯录系统_JSP个人通讯录系统
  7. Linux中数据库备份和恢复
  8. PreferenceManager被弃用,用什么替代
  9. 你怎么知道我什么都不会
  10. 虚拟机 VMware Workstation 中使用大白菜U盘启动安装操作系统方法