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

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

题目描述
在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,分别后续的修改。
请用函数实现一个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, …);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ISE报错问题集锦(转载)

1、XST - "ERROR:Xst:902 - .v, line xx: Unexpected event in always block sensitivity list." 解决方法&#xff1a;Resolution 1 XST does not currently support logical operators in the sensitivity list. Because these logical operators are not evaluate…

创建 OVS 外部网络 ext_net - 每天5分钟玩转 OpenStack(144)

上一节完成连接外网的配置准备工作&#xff0c;今天就来创建 OVS 外部网络 ext_net。 进入 Admin -> Networks 菜单&#xff0c;点击 “Create Network” 按钮。 显示创建页面。 Provider Network Type 选择 “Flat”。 Network 填写 “external”&#xff0c;与 ml2_conf.…

Linux学习之zImage内核镜像解压过程详解

zImage内核镜像解压过程详解 收藏 zImage内核镜像解压过程详解 作者&#xff1a; 刘洪涛&#xff0c;华清远见嵌入式培训中心 讲师。 本文以linux-2.6.14内核在S3C2410平台上运行为例&#xff0c;讲解内核的解压过程。 内核编译完成后会生成zImage内核镜像文件。关于…

4位数值比较器电路

4位数值比较器电路 题目描述&#xff1a;使用门级描述方式&#xff0c;实现4位数值比较器 某4位数值比较器的功能如下表 timescale 1ns/1nsmodule comparator_4(input [3:0] A ,input [3:0] B ,output wire Y2 , //A>Boutput wire Y1 …

将 ext_net 连接到 router - 每天5分钟玩转 OpenStack(145)

上一节完我们创建了外部网络 ext_net&#xff0c;接下来需要将其连接到 Neutron 的虚拟路由器&#xff0c;这样 instance 才能访问外网。 点击菜单 Project -> Network -> Routers 进入 router 列表。 点击 router_100_101 的 “Set Gateway” 按钮。 在 “External Netw…

Xilinx_ISE和ModelSim的联合使用方法 / 从Xilinx ISE 14.7启动ModelSim时遇到的问题

解决方法&#xff1a; 前提是安装了 xilinx ise14.7 和modelsim se 10.1a 1〉从Windows的Start Menu开始&#xff0c;Xilinx ISE Design Suite 14.7 —〉EDK —〉Tools —〉Compile Simulation Libraries 按照提示编译好library&#xff0c;编译的library输出目录是&#xff…

ML2 配置 OVS VxLAN - 每天5分钟玩转 OpenStack(146)

今天我们开始学习 OVS 如何实现 Neutron VxLAN&#xff0c;关于 VxLAN 的概念以及 Linux Bridge 实现&#xff0c;大家可以参考前面相关章节。 Open vSwitch 支持 VXLAN 和 GRE 这两种 overlay network。因为 OpenStack 对于 VXLAN 与 GRE 配置和实现差别不大&#xff0c;这里只…

4bit超前进位加法器电路

4bit超前进位加法器电路 题目描述 采用门级描述方式&#xff0c;实现此4bit超前进位加法器&#xff0c;接口电路如下&#xff1a; timescale 1ns/1nsmodule lca_4(input [3:0] A_in ,input [3:0] B_in ,input C_1 ,output wire CO …

Linux-Android系统启动之INIT进程和system v init

Linux系统启动之INIT进程和system v init 一. Linux系统启动之INIT进程和system v init 1. 首先介绍一下INIT进程   init进程在Start_kernel执行完毕之后&#xff0c;也就是Kernel初始化完毕之后启动&#xff0c;是系统所有进程的起点&#xff0c;内核在完成核内引导以后&a…

学习Zynq-7000的入门书单

根据选用的芯片型号和应用领域的不同&#xff0c;读者可以适当裁减。 Entrance Readings: 1. Zynq-7000 User Guides Zynq-7000 All Programmable SoC: Concepts, Tools, and Techniques http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_4/ug873-zynq-ctt.pd…

创建 vxlan 并部署 instance - 每天5分钟玩转 OpenStack(147)

上一节我们完成了 OVS VxLAN 的配置工作&#xff0c;今天创建 vxlan100_net 并部署 instance。 创建 vxlan100_net 打开菜单 Admin -> Networks&#xff0c;点击 “Create Network” 按钮。 显示创建页面。 Provider Network Type 选择 “VXLAN”。 Segmentation ID 即 VNI…

有限编码器电路

有限编码器电路 题目描述 timescale 1ns/1nsmodule encoder_0(input [8:0] I_n ,output reg [3:0] Y_n ); // always (*)begin // casex(I_n) // 9b111111111 : Y_n 4b1111; // 9b0xxxxxxxx : Y_n 4b0110; // 9b10xxx…

Linux-Android启动之zImage生成过程详解

可以看到&#xff0c;在顶层makefile的第278行&#xff0c;包含了scripts/Kbuild.include文件&#xff0c;在这里定义了大量的函数和变量&#xff0c;供顶层makefile和其他makefile文件使用。 在顶层makefile文件的第412行&#xff0c;包含了arch/arm/Makefile。这个是体系结…

行业发展的大势所趋 嵌入式机器视觉系统前景一片大好

机器视觉系统是一种非接触式的光学传感系统。它同时集成软硬件&#xff0c;能够自动地从所采集到的图像中获取信息或者产生控制动作。自起步发展到现在&#xff0c;主要经历了数字电路组成、PC机和输出设备组成、嵌入式三个阶段。 其中&#xff0c;嵌入式机器视觉系统依托专业计…

优先编码器

优先编码器 题目描述 8-3优先编码器的功能表 timescale 1ns/1nsmodule encoder_83(input [7:0] I ,input EI ,output wire [2:0] Y ,output wire GS ,output wire EO );reg [2:0]Y_reg;reg GS_reg;reg EO…

OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)

上一节创建了 vxlan100_net 并部署 instance&#xff0c;今天我们来分析底层网络结构。 控制节点 执行 ovs-vsctl show&#xff1a; br-int br-int 连接了如下 port: tap0d4cb13a-7a 是 vxlan100_net 的 DHCP 服务对应的 interface。 qvoa2ac3b9a-24 将 cirros-vm1 虚拟网卡连…

Linux-Android启动之Init进程前传

对Linux-Android系统的启动做了一些分析&#xff0c;下面的一篇文章侧重讲述Linux启动过程中函数Start_kernel()被调用之前的一些分析&#xff0c;同时也对函数Start_kernel()之后的代码流程作了概述&#xff0c;我希望关于Linux-Android系统的启动的专题能够继续地写下去&…

如何正确入门Windows系统下驱动开发领域?

[作者]猪头三作者网站: http://www.x86asm.com原文链接: http://blog.csdn.net/Code_GodFather/...0/5975901.aspx[贡献者]1> defddr 看雪学院2> StudyRush 看雪学院[序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大…

OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)

OVS 的数据流向都是由 Flow 规则控制的&#xff0c;今天我们就来分析 VxLAN 的 Flow 规则。 提个醒&#xff1a;这可能是本教程最烧脑的一节&#xff0c;lets rock it ! 下面分析控制节点上的 flow rule&#xff0c;计算节点类似。 br-int 的 flow rule br-int 的 rule 看上去虽…

制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)

这是 OpenStack 实施经验分享系列的第 1 篇。 OpenStack 的 instance 是通过 Glance 镜像部署的&#xff0c;所以准备镜像是必须要做的工作。本节介绍 Linux 镜像的制作方法&#xff0c;后面还会讨论 Windows 镜像。 下载clould 镜像 最简单的方法是使用标准镜像。主流的Linux发…