搜索
bottom↓
回复: 8

如何实现16位寄存器的8位接收,同时低8位移到高8位?

[复制链接]

出0入0汤圆

发表于 2012-11-2 10:45:40 | 显示全部楼层 |阅读模式
请教个问题:如何实现16位寄存器的8位接收,同时低8位移到高8位?
我现在做的项目有个问题:就是使用串口接收8位数据,但是16位数据才组成一个控制命令,我想使用一个16位寄存器的低8位接收最新的数据,在接收最新数据的同时,低8位数据移动到高8位,如何实现此功能?
像下面这样写是否可以,在一个时钟周期command2是否能同时完成低8位接收、同时低8位移动到高8位的两个动作?
                 begin
                        command2[7:0]  <=command;
                        command2  <=command2<<8'd8;                       
                 end



//------------------------------------
`timescale 1ns / 1ps
module cis_ctrl(
               clk,
                                        rst_n,
                                       
                                        rcv_data_sig,                                       
                                        command,
                                        rtn,
                                       
                                        state0,
                                        state1,
                                        state_trg
                                        );
//

input clk;
input rst_n;
input rcv_data_sig;
input command;
output state0;
output state1;
output [7:0]state_trg;
output rtn;

reg [15:0]command2;
reg command1;



always @(posedge clk or negedge rst_n)
     if(!rst_n)            
              command2<=16'd0;                    
     else if(rcv_data_sig)               
            begin
                        command2[7:0]  <=command;
                        command2  <=command2<<8'd8;                       
                 end
         

endmodule

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-2 11:01:37 | 显示全部楼层
不行,command2在这个时钟内是上一次的数据。你可以设一个标志位,0的时候就给低8位,1的时候给高8位

出0入0汤圆

 楼主| 发表于 2012-11-2 11:45:14 | 显示全部楼层
thank you                        

出0入0汤圆

发表于 2012-11-2 13:19:09 | 显示全部楼层
有那么复杂吗?
  command2<= {command2[7:0],command}; 不就能实现要求了?

出0入0汤圆

 楼主| 发表于 2012-11-5 21:16:14 | 显示全部楼层
yayakimwu 发表于 2012-11-2 13:19
有那么复杂吗?
  command2

这样可以吗 ,
等于是 低8为 给高8位 赋值的同时,又使用command给低8位重新赋值,这样在一个时钟周期内不能完成吧?

出0入0汤圆

 楼主| 发表于 2012-11-5 21:16:45 | 显示全部楼层
大家  谁有比较好的办法?

出0入0汤圆

发表于 2012-11-6 12:48:40 | 显示全部楼层
german010 发表于 2012-11-5 21:16
这样可以吗 ,
等于是 低8为 给高8位 赋值的同时,又使用command给低8位重新赋值,这样在一个时钟周期内 ...

就是相当于8个串行移位并在一起工作。一个时钟周期当然可以完成。

出0入0汤圆

 楼主| 发表于 2012-11-6 14:43:52 | 显示全部楼层
还是有点迷惑,command2的高8位command2[15:8]相当于一个寄存器A,其低command2[7:0]相当于另外一寄存器B,另外command 相当于另外一个寄存器C,
在同一个时钟周期内,C赋值给B,B同时赋值给A,A内存储的时B原来的值,还是存储的C的值?

出0入0汤圆

发表于 2012-11-6 21:27:54 | 显示全部楼层
german010 发表于 2012-11-6 14:43
还是有点迷惑,command2的高8位command2[15:8]相当于一个寄存器A,其低command2[7:0]相当于另外一寄存器B, ...

建议你去看看D触发器是怎样工作的。
在上升沿的那一刻,其输入端的值被锁存,你说会是什么?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表