通过Verilog进行简单的编译
来源:互联网 发布:ubuntu设置中文环境 编辑:程序博客网 时间:2024/06/13 02:36
4-16进制译码器
首先,创建新的Verilog文本,打入如下代码
module ligulei5(IN , // input OUT ); // output input [3:0] IN;output[15:0] OUT;reg [15:0] OUT;// get the OUT always @ (IN) begin case(IN) 4'b0000: OUT = 16'b0000_0000_0000_0001; 4'b0001: OUT = 16'b0000_0000_0000_0010; 4'b0010: OUT = 16'b0000_0000_0000_0100; 4'b0011: OUT = 16'b0000_0000_0000_1000; 4'b0100: OUT = 16'b0000_0000_0001_0000; 4'b0101: OUT = 16'b0000_0000_0010_0000; 4'b0110: OUT = 16'b0000_0000_0100_0000; 4'b0111: OUT = 16'b0000_0000_1000_0000; 4'b1000: OUT = 16'b0000_0001_0000_0000; 4'b1001: OUT = 16'b0000_0010_0000_0000; 4'b1010: OUT = 16'b0000_0100_0000_0000; 4'b1011: OUT = 16'b0000_1000_0000_0000; 4'b1100: OUT = 16'b0001_0000_0000_0000; 4'b1101: OUT = 16'b0010_0000_0000_0000; 4'b1110: OUT = 16'b0100_0000_0000_0000; 4'b1111: OUT = 16'b1000_0000_0000_0000; endcase endendmoduled
打入代码之后,进行部分编译,之后打开Tools目录下的 RTL viewer 查看逻辑图,逻辑图如下:
检查完逻辑图之后,进行完全编译,之后画波形图,得到波形图如下:
十二进制计数器
创建新的Verilog文本,打入如下代码
module ligulei3( RST , // 异步复位, 高有效 CLK , // 时钟,上升沿有效 EN , // 输入的计数使能,高有效 CLR , // 输入的清零信号,高有效 LOAD , // 输入的数据加载使能信号,高有效 DATA , // 输入的加载数据信号 CNTVAL, // 输出的计数值信号 OV );// 计数溢出信号,计数值为最大值时该信号为1input RST , CLK , EN , CLR , LOAD ;input [3:0] DATA ;output [3:0] CNTVAL;output OV; reg [3:0] CNTVAL, cnt_next;reg OV;// 电路编译参数,最大计数值parameter CNT_MAX_VAL = 11;// 组合逻辑,生成cnt_next// 计数使能最优先,清零第二优先,加载第三优先always @(EN or CLR or LOAD or DATA or CNTVAL) begin if(EN) begin // 使能有效if(CLR) begin // 清零有效 cnt_next = 0;endelse begin // 清零无效 if(LOAD) begin // 加载有效 cnt_next = DATA; end else begin // 加载无效,正常计数 // 使能有效,清零和加载都无效,根据当前计数值计算下一值 if(CNTVAL < CNT_MAX_VAL) begin // 未计数到最大值, 下一值加1 cnt_next = CNTVAL + 1'b1; end else begin // 计数到最大值,下一计数值为0 cnt_next = 0; end end // else LOAD end // else CLR end // if EN else begin // 使能无效,计数值保持不动 cnt_next = CNTVAL; end // else ENend// 时序逻辑 更新下一时钟周期的计数值// CNTVAL 会被编译为D触发器always @ (posedge CLK or posedge RST) begin if(RST) CNTVAL <= 0; else CNTVAL <= cnt_next;end // 组合逻辑,生成OValways @ (CNTVAL) begin if(CNTVAL == CNT_MAX_VAL) OV = 1; else OV = 0; endendmodule
打入代码之后,进行部分编译,之后打开Tools目录下的 RTL viewer 查看逻辑图,逻辑图如下:
检查完逻辑图之后,进行完全编译,之后画波形图,得到波形图如下:
二十进制计数器
创建新的Verilog文本,打入如下代码
module ligulei6( RST , // 异步复位, 高有效 CLK , // 时钟,上升沿有效 EN , // 输入的计数使能,高有效 CLR , // 输入的清零信号,高有效 LOAD , // 输入的数据加载使能信号,高有效 DATA , // 输入的加载数据信号 CNTVAL, // 输出的计数值信号 OV );// 计数溢出信号,计数值为最大值时该信号为1input RST , CLK , EN , CLR , LOAD ;input [4:0] DATA ;output [4:0] CNTVAL;output OV; reg [4:0] CNTVAL, cnt_next;reg OV;// 电路编译参数,最大计数值parameter CNT_MAX_VAL = 19;// 组合逻辑,生成cnt_next// 计数使能最优先,清零第二优先,加载第三优先always @(EN or CLR or LOAD or DATA or CNTVAL) begin if(EN) begin // 使能有效if(CLR) begin // 清零有效 cnt_next = 0;endelse begin // 清零无效 if(LOAD) begin // 加载有效 cnt_next = DATA; end else begin // 加载无效,正常计数 // 使能有效,清零和加载都无效,根据当前计数值计算下一值 if(CNTVAL < CNT_MAX_VAL) begin // 未计数到最大值, 下一值加1 cnt_next = CNTVAL + 1'b1; end else begin // 计数到最大值,下一计数值为0 cnt_next = 0; end end // else LOADend // else CLR end // if EN else begin // 使能无效,计数值保持不动 cnt_next = CNTVAL; end // else ENend// 时序逻辑 更新下一时钟周期的计数值// CNTVAL 会被编译为D触发器 always @ (posedge CLK or posedge RST) begin if(RST) CNTVAL <= 0; else CNTVAL <= cnt_next; end// 组合逻辑,生成OValways @ (CNTVAL) begin if(CNTVAL == CNT_MAX_VAL) OV = 1; else OV = 0; endendmodule
打入代码之后,进行部分编译,之后打开Tools目录下的 RTL viewer 查看逻辑图,逻辑图如下:
检查完逻辑图之后,进行完全编译,之后画波形图,得到波形图如下:
阅读全文
0 0
- 通过Verilog进行简单的编译
- 用modelsim对verilog经编译的程序进行仿真
- 如何通过WiFi进行简单的配置
- 通过 php 进行简单的缩略图裁剪
- Verilog简单的组合逻辑设计
- D3DX11 简单的 编译通过和运行
- java是通过java虚拟机进行编译和运行的。
- Verilog HDL的编译预处理语句
- Verilog HDL的编译预处理语句
- verilog--除法器的简单实现(1)
- 通过灰度直方图进行简单的阈值分割
- 通过tomcat自身进行简单的动静分离
- android 通过URL进行http通信的简单demo
- 一个简单的表单提交页面,通过js进行验证
- 简单的通过shell脚本接收参数进行数据库操作
- 通过简单编译,编译成C,以及编译成C而且并行化的方式对某些Mathematica的函数进行提速
- 嵌入式 简单的宏在编译的时候进行定义
- 通过简单快速的设置编译x64位汇编
- PHP讲述
- App的登陆注册接口安全设计
- C#基础---params参数
- jdbc statement
- C++ primer学习笔记 ——标准库类型vector
- 通过Verilog进行简单的编译
- JavaWeb开发模式二:JSP+Servlet+JavaBean
- PS之钢笔工具
- 智能指针–std::auto_ptr
- python: isspace函数
- 用eclipse开发第一个MyBatis
- 博弈游戏(取石子)C++实现
- Ubuntu下安装nodejs
- java web项目:学生考试系统(从入门到跑路)onlinexamnew:(2)命名规则