使用函数实现数据大小端转换

题目描述
在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,分别后续的修改。
请用函数实现一个4bit数据大小端转换的功能。实现对两个不同的输入分别转换并输出。
接口的信号图如下:

`timescale 1ns/1ns
module function_mod(input clk,input rst_n,input [3:0]a,input [3:0]b,output [3:0]c,output [3:0]d
);reg [3:0] c_reg;reg [3:0] d_reg;always@(*)beginif(!rst_n)beginc_reg = 4'b0;d_reg = 4'b0;endelsebeginc_reg = conversion(a);d_reg = conversion(b);endendassign c = c_reg;assign d = d_reg;function [3:0] conversion;input [3:0] data_in;integer i;beginfor(i = 0; i <= 3; i = i + 1)conversion[i] = data_in[ 3 - i];endendfunction
endmodule

知识点
在 Verilog 中,可以利用任务(关键字为 task)或函数(关键字为 function),将重复性的行为级设计进行提取,并在多个地方调用,来避免重复代码的多次编写,使代码更加的简洁、易懂。

函数只能在模块中定义,位置任意,并在模块的任何地方引用,作用范围也局限于此模块。函数主要有以下几个特点:

  • 不含任何延迟、时序或时序控制逻辑。–只能是组合逻辑
  • 至少有一个输入变量。
  • 只有一个返回值(返回值的变量就是函数名),且没有输出。
  • 不含有非阻塞赋值语句。
  • 函数可以调用其他函数,但是不能调用任务。

Verilog 函数声明格式如下:

function [range-1:0]     function_id ;input_declaration ;other_declaration ;procedural_statement ;
endfunction

其中:函数在声明时,会隐式的声明一个宽度为 range、 名字为 function_id 的寄存器变量,函数的返回值通过这个变量进行传递。当该寄存器变量没有指定位宽时,默认位宽为 1。
函数通过指明函数名与输入变量进行调用。函数结束时,返回值被传递到调用处。

函数调用格式如下:

function_id(input1, input2, …);

使用函数实现数据大小端转换相关推荐

  1. Verilog学习之数据大小端转换设计

    文章目录 前言 一.题目描述 二.实现思路 1.函数的概念 2.具体思路 三.代码展示 总结 前言 今天我们做的是第十道题--使用函数实现数据大小端转换,这道题其实也比较简单,就是逆向输出一个数据,但 ...

  2. c语言高低位拷贝_C语言中的大小端转换与高低位颠倒

    总结一下最近工作学到的东西,主要是关于大小端与高低位. 在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit ...

  3. 来点基础的东西,关于浮点数的大小端转换以及浮点数的格式解析

    在网上并没有任何信息或则资料介绍关于浮点数的大小端转换的原理的问题,大小端是不同的内存存储实现方式,大端更符合人的阅读习惯,而小端则是更适合CPU读取. 我先说整型,来说明大小端在内存中的存储方式,整 ...

  4. C语言中的大小端转换与高低位颠倒

    在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit). 一个字节,可以声明为unsigned char型数 ...

  5. Linux大小端转换实现

    实现 #include <byteswap.h> #include <stdint.h>/*** @brief 8字节类型的字节序转化*/ template<class ...

  6. Java 大小端转换(基于ByteBuffer)

    大小端的基础知识: 小端 ( little-endian):低位字节在前,高位字节在后.大端(Big-Endian),则反之.具体而言,就是为了说清楚,CPU架构中1字(word)的存储顺序.计算机内 ...

  7. C++ int float double类型的数据大小端转化

    以下代码抄自<网络多人游戏架构与编程>,可以支持float.int.double等数据类型数据的大小端转换,测试代码为: void TestByteSwap() {int32_t test ...

  8. java大小端转换工具类

    最近的项目频繁涉及大小端转换的情况,参考github(https://github.com/Frank-Wiebeler/java-Big2LittleEndian/blob/master/src/c ...

  9. 大小端转换 int16 和int32

    int16 大小端转换: static inline uint16_t bswap_16(uint16_t x) {     return (x >> 8) | (x << 8 ...

最新文章

  1. 终端bash美化(FC)
  2. mysql5.6安装及实现双向备份
  3. 按钮button的常用属性和事件
  4. php mysql PDO 查询操作的实例详解
  5. scala中_*的作用
  6. 一位嵌入式工程师,硬核单片机编程思想!
  7. 【GOF23设计模式】原型模式
  8. 工作294:for[item.key]使用
  9. 严蔚敏数据结构:链表实现一元多项式相加
  10. php设置mysql 编码_php怎么设置mysql编码?
  11. Lineageos14 20180525更新
  12. mysql 日期格式
  13. 忽略这一点,人工智能变人工智障的!
  14. IOS6初始化后设置UIScrollview的位置
  15. QMessageBox自定义大小
  16. mysql Unknown storage engine 'InnoDB'解决
  17. 文华wh6如何修改服务器,文华财经 软件特色功能介绍修改
  18. 远程打印服务器配置,打印服务器的配置与管理(1) 网络打印机的安装与部署...
  19. 佛山科目三仙塘中腾考场-考试要点(已经有新考场,这是旧考场经验)
  20. Laravel文档阅读笔记-Adding a Markdown editor to Laravel

热门文章

  1. PLSQL_案例优化系列_学会应用工具进行SQL整体优化(案例11)
  2. 使用U盘安装操作系统
  3. praying,blessing,wishing
  4. 思科认证36个热门考点汇总
  5. Today's my MDX...
  6. CSS 居中方法集锦
  7. 利用Java进行MySql数据库的导入和导出
  8. murmur3 php,MySQL5.7 切不要乱射 --transaction-write-set-extraction=MURMUR32
  9. ozf oracle,ORACLE EBS 简称大全
  10. 安卓php高级编辑器使用方法,Android Studio实战 - 编辑器介绍与使用