verilog中assign语句
来源:互联网 发布:js excel文件流下载 编辑:程序博客网 时间:2024/05/16 04:22
/*************************************** Module: assign* Date:2014-08-10 * Author: hemmingway@163.com ** Description: verilog中的assign语句的用法***************************************//*一、引入语法的概念 1、只有寄存器类型的信号才可以在always和initial 语句中进行赋值,类型定义通过reg语句实现。 2、always 语句是一直重复执行,由敏感表(always 语句括号内的变量)中的变量触发。 3、always 语句从0 时刻开始。 4、在begin 和end 之间的语句是顺序执行,属于串行语句。*/// assign 语句的用法module test;// 1.作为信号量输出,通过寄存器连续赋值output [3:0] oLED; // 默认是wire类型,需要持续输出才行//internal signalreg [3:0] sr_LED; //用独热码表示LED亮灯位置。assign oLED[3:0] = ~sr_LED[3:0]; //向LED灯接口输出信号。//2.作为信号量输出,通过寄存器拼接数据位实现。 output [15: 0] oSI_DATA;//internal signal reg [ 3: 0] s_HEX; reg [ 7: 0] s_SEGBINARY; // s_SEGBINARY[2] should be the DOT reg [ 3: 0] s_SEG_SEL;assign oSI_DATA = {iLED_SEL,s_SEG_SEL,s_SEGBINARY};//3.作为信号量输出,通过判断条件,赋值给信号 output[ 1: 0] oSEG_STATE;output oCP_PLUSE;wire s_CNTEQCYCLE; parameter PARAM_7SEG_CYCLE = 32'd2500000;reg [ 1: 0] sr_SEG_STATE;reg [31: 0] sr_cnt;reg sr_cp_pluse; assign oSEG_STATE = sr_SEG_STATE;assign oCP_PLUSE = sr_cp_pluse;assign s_CNTEQCYCLE = ( sr_cnt == PARAM_7SEG_CYCLE ) ? 1 : 0;//4.作为输出信号量,通过输入信号量赋值给输出,同样可以输入信号量和寄存器组合逻辑,赋值给输出信号量。input iCLK50M;input iCP_PULSE;input[15:0] iSI_DATA;output oSI;output oCP;reg [ 3: 0] sr_cnt;reg [15: 0] sr_si_data;reg sr_cp;reg sr_en;assign oSI = sr_si_data[15];assign oCP = sr_en & iCLK50M;endmodule//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 下面是功能相同但写法不同的两段代码:// 第一段Amodule assign_test_a ( clk, lhold, lholda);input clk;input lhold;output lholda; // 将输出定义为reg类型, 不用assign来持续输出了reg lholda;always @(posedge clk)if (lhold) lholda<=lhold;else lholda<=0;endmodule// 第二段Bmodule assign_test_b ( clk, lhold, lholda);input clk;input lhold;output lholda; // 默认是wire类型的reg lholda_r; // 定义一个内部的reg变量,always @(posedge clk) if (lhold) lholda_r<=lhold; else lholda_r<=0;assign lholda=lholda_r; // 进行持续赋值输出endmodule// 分析/* 从实用角度来说,这里的意义比较大。当内部有多个信号需要输出,可是输出引脚只有一个,那么这时就可以进行选择。如下:assign lholda= (条件)? (lholda_ra): lholda_rb; 可以嵌套使用。 或者在这种情况下也非常有用。 Lholda 与 内部的reg输出lholda_ra, lholda_rb,…., 存在逻辑函数关系*/
0 0
- verilog中assign语句
- Verilog中assign的使用
- Verilog中assign的用法
- Verilog中assign的使用
- Verilog中assign君和always酱
- verilog中的assign
- Verilog中阻塞与非阻塞语句
- 总结Verilog中always语句的使用
- Verilog中阻塞与非阻塞语句
- Verilog中for语句的使用
- Verilog中顺序语句的理解
- verilog语句
- Verilog中 reg和wire 用法和区别以及always和assign的区别
- verilog中assign和always@(*)两者描述组合逻辑时的差别
- Verilog assign和always 注意事宜
- Verilog assign和always 注意事宜
- Verilog assign和always 注意事宜
- Verilog中Task语句可综合设计实例
- [LeetCode]Balanced Binary Tree
- 搭建阿里云服务器 配置命令 centos 5.8
- Java中的构造方法与普通方法的区别? 什么情况下用构造方法什么情况下用普通的方法
- git用法小结(1)--建立远程仓库
- Zookeeper--从0单排第二集 迅速开始
- verilog中assign语句
- 分拆素数和(2098)
- hdu oj1102 Constructing Roads(最小生成树)
- 国内IT行业的小企业发展所需要的是什么?
- createthread、_beginthread和_beginthreadex
- TQ2440——NandFlash分区修改
- 设计模式之结构型模再理解
- 从B树、B+树、B*树谈到R 树
- libevent源码笔记(一) Reactor框架