在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2432|回复: 8

[求助] verilog 怎么把字符串 一个字符一个字符发送

[复制链接]
发表于 2017-1-10 15:05:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
例如reg [1 : 8*14] Message;       Message = "INTERNAL ERROR";

        output reg[7:0] data_out;
要把INTERNAL ERROR 一个字符一个字符 由data_out发送出来 怎么实现呢?


data_out = Message[8*14:8*14-7];//发送第一个 “I”;
但是[]中间只能是常量表达式,那么笨办法只能是一个一个敲,有没有别的方法呢?
发表于 2017-1-11 13:18:01 | 显示全部楼层
可以用一个for loop来实现啊
for (i = 0; i <14; i++)
  data_out = Message[8*14-i*8 : 8*14-i*8-7];

不过用rtl来实现这种逻辑功能,貌似有些奇怪。
发表于 2017-1-14 15:40:35 | 显示全部楼层
赞同楼上的说法  
我学了没多久 只知道verilog是硬件语言 硬件输入输出无非就是0 和1 所以你这个想法就是强人所难的感觉
发表于 2017-1-15 22:23:29 | 显示全部楼层
采用字节移位的方法做:
1.定义一个字节移位的寄存器byte_shift;
2.再定义一个message加载控制信号load_message,便于新的message输入;
3.再定义一个发送字节计数byte_cnt;
always @(posedge clk or negedge rst_n)
    if(!rst_n)
         byte_shift <= 14*8'd0;
    else if(load_message)
         byte_shift <= message;
    else if(byte_cnt < 14)
         byte_shift <= {8'd0,byte_shift[14*8:8]};
   
data_out = byte_shift[7:0];
发表于 2017-1-16 10:33:44 | 显示全部楼层
谢谢分享
发表于 2017-1-16 10:36:11 | 显示全部楼层
谢谢分享
发表于 2017-1-16 10:40:38 | 显示全部楼层
谢谢分享
发表于 2017-1-16 10:44:30 | 显示全部楼层
谢谢分享
发表于 2017-1-16 10:47:44 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-7-4 16:22 , Processed in 0.022080 second(s), 8 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表