Modelsim波形显示字符
偶然在 QQ 群里看到一个大佬发的 Modelsim 波形显示字符,闲着没事拿来玩玩,并将改良过程也整理一下。
一、字符点阵产生
软件采用 PCtoLCD2002,打开后不需要设置,直接打字然后点击【生成字模】,然后复制产生的字模。

二、字模调整
复制之后的字模如下所示:

将字模中的提示信息、标点符号、注释都删除。并且将相邻两个数据调整为一个数据,并将调整后的所有数据调整为一列,如下所示:

调整完后将该文件重命名并修改后缀为【char.hex】,供后面 Verilog 读取该文件。
三、代码设计
原文的设计有 2 个 Verilog 设计文件和 1 个 testbench 文件,我将其合并为 1 个,如下所示:
1 `timescale 1ns/1ps //时间精度
2
3 module char_display;
4 //========================< 信号 >==========================================
5 reg clk = 0 ; //时钟,初始为0
6 reg [15:0] ram[2**8-1:0] ; //数组
7 reg [15:0] cnt = 0 ; //计数器,初始为0
8 wire [ 7:0] rd_addr ; //读地址
9 reg [15:0] rd_data ; //数组读数据
10 wire [15:0] char ; //字符显示
11 //========================< 代码 >==========================================
12 //时钟
13 always #10 clk = ~clk;
14
15 //数组初始化,读取字符数据
16 initial $readmemh("char.hex", ram);
17
18 //数组读地址
19 always@(posedge clk) begin
20 cnt <= cnt + 1'b1;
21 end
22
23 assign rd_addr = cnt[15:8];
24
25 //数组读数据
26 always @(posedge clk) begin
27 rd_data <= ram[rd_addr];
28 end
29
30 //波形输出(rd_data已经有形状了,再把它加粗)
31 assign char = rd_data[15:0] & {16{clk}};
32
33
34 endmodule
四、仿真波形
建立 Modelsim 工程并显示 char 信号的波形,展开 char 信号即可看到字符了。当然也可以写个脚本自动化仿真,脚本文件如下所示:
1 # ========================< 清空软件残留信息 >==============================
2
3 # 退出之前仿真
4 quit -sim
5
6 # 清空信息
7 .main clear
8
9 # =========================< 建立工程并仿真 >===============================
10
11 # 建立新的工程库
12 vlib work
13
14 # 映射逻辑库到物理目录
15 vmap work work
16
17 # 编译文件
18 vlog *.v
19
20 # 启动仿真:10.7之前版本的仿真请将"-voptargs=+acc换成-novopt"
21 vsim -voptargs=+acc work.char_display
22
23 # ============================< 加载波形 >==================================
24
25 # 添加标签和波形
26 add wave -position insertpoint \
27 {sim:/char_display/char[15]} \
28 {sim:/char_display/char[14]} \
29 {sim:/char_display/char[13]} \
30 {sim:/char_display/char[12]} \
31 {sim:/char_display/char[11]} \
32 {sim:/char_display/char[10]} \
33 {sim:/char_display/char[9]} \
34 {sim:/char_display/char[8]} \
35 {sim:/char_display/char[7]} \
36 {sim:/char_display/char[6]} \
37 {sim:/char_display/char[5]} \
38 {sim:/char_display/char[4]} \
39 {sim:/char_display/char[3]} \
40 {sim:/char_display/char[2]} \
41 {sim:/char_display/char[1]} \
42 {sim:/char_display/char[0]}
43
44 # 跑400us
45 run 400us
最后的结果如下所示:

也可以发挥创造力,弄个两行的字符波形出来,只需要将关键代码多设置一份就行了。

五、工程链接
链接:https://pan.baidu.com/s/1kKI0d2TzDfh78Ed_RAMcAA
提取码:867g
参考资料:公众号《数字积木》

Modelsim波形显示字符的更多相关文章
- Modelsim设置数据以模拟波形显示
选中希望以模拟波形显示的信号,右击选择format—>Analog(automatic) 如果你的数据是用无符号数表示一个完整的波形的,那么可能显示出来的波形样子是下面的样子,不过不要紧,这是因 ...
- 玩转X-CTR100 | X-PrintfScope波形显示
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器配套的X-Print ...
- Oracle一列的多行数据拼成一行显示字符
Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CO ...
- 在当前光标处按指定属性显示字符 - BOIS中断
在当前光标处按指定属性显示字符 - BOIS中断 最简单的调试方式是打印. 编写MBR时,判断MBR是否加载并运行,最直接的方式就是打印一个字符. INT 0x10 功能描述: 在当前光标处按指定属性 ...
- [转] 基于C#的波形显示控件的实现
转自 基于C#的波形显示控件的实现[附完整源码下载] 编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的 ...
- 显示字符 Exercise06_12
/** * @author 冰樱梦 * 时间:2018年下半年 * 题目:显示字符 *1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J ...
- STM32学习之路-LCD(4)<显示字符>
昨晚疯狂的打了一夜的LOL,感觉L多了,今天一天精神萎靡.还是继续把显示字符给看了,可是在犹豫要不要写这篇文章 事实上写的东西也就是copy别人家的代码,不想写那么多,就记录下自己困惑的地方吧.也许改 ...
- 在Modelsim波形窗口复制信号
可以通过张贴复制变量名在Modelsim波形窗口复制信号.
- 基于C#的波形显示控件的实现[转]
编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学 ...
随机推荐
- Docker_Swarm集群系统
Docker_Swarm集群系统 一.Docker Swarm 介绍 实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernete ...
- 深度学习Dropout技术分析
深度学习Dropout技术分析 什么是Dropout? dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机 ...
- LED液晶与OLED:电视显示技术比较
LED液晶与OLED:电视显示技术比较 LED LCD vs. OLED: TV display technologies compared 到目前为止,LED-LCD是主导的电视显示技术,特别是在等 ...
- C++标准模板库(STL)——queue常见用法详解
queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...
- Python_selenium页面元素整合设计经验
- 教你三种jQuery框架实现元素显示及隐藏动画方式
摘要:在jQuery框架中对元素对象进行显示和隐藏有三种方式,分别是"默认方式显示和隐藏"."滑动方式显示和隐藏"."淡入淡出显示和隐藏". ...
- 菜鸟刷题路(随缘刷题):leetcode88
lc88 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i = m - 1, j = ...
- 内核、dns、网卡配置
升级内核(安装新版软件包) rpm -ivh kernel-3.10.0-123.1.2.el7.x86_64.rpm 二.配置永久IP地址,子网掩码,网关地址 /etc/sysconfig/ne ...
- 【工具解析】瑞士军刀bettercap2.X_解析_第二期_内网钓鱼(嗅探)工具编写
/文章作者:Kali_MG1937 CNBLOG博客:ALDYS4 QQ:3496925334/ 第一期: https://www.cnblogs.com/aldys4/p/14877783.html ...
- .Net Redis实战指南——常用命令
本问主要介绍rabbitmqctl工具的常用命令. vhost 一个RabbitMQ服务器可以创建多个虚拟的消息服务器,称之为虚拟主机(virtual host),简称为vhost.vhost之间是绝 ...