german010 发表于 2012-11-2 10:45:40

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

请教个问题:如何实现16位寄存器的8位接收,同时低8位移到高8位?
我现在做的项目有个问题:就是使用串口接收8位数据,但是16位数据才组成一个控制命令,我想使用一个16位寄存器的低8位接收最新的数据,在接收最新数据的同时,低8位数据移动到高8位,如何实现此功能?
像下面这样写是否可以,在一个时钟周期command2是否能同时完成低8位接收、同时低8位移动到高8位的两个动作?
               begin
                        command2<=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 state_trg;
output rtn;

reg command2;
reg command1;



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

endmodule

wildone 发表于 2012-11-2 11:01:37

不行,command2在这个时钟内是上一次的数据。你可以设一个标志位,0的时候就给低8位,1的时候给高8位

german010 发表于 2012-11-2 11:45:14

thank you                        

yayakimwu 发表于 2012-11-2 13:19:09

有那么复杂吗?
command2<= {command2,command}; 不就能实现要求了?

german010 发表于 2012-11-5 21:16:14

yayakimwu 发表于 2012-11-2 13:19 static/image/common/back.gif
有那么复杂吗?
command2

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

german010 发表于 2012-11-5 21:16:45

大家谁有比较好的办法?

zhangalex88 发表于 2012-11-6 12:48:40

german010 发表于 2012-11-5 21:16 static/image/common/back.gif
这样可以吗 ,
等于是 低8为 给高8位 赋值的同时,又使用command给低8位重新赋值,这样在一个时钟周期内 ...

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

german010 发表于 2012-11-6 14:43:52

还是有点迷惑,command2的高8位command2相当于一个寄存器A,其低command2相当于另外一寄存器B,另外command 相当于另外一个寄存器C,
在同一个时钟周期内,C赋值给B,B同时赋值给A,A内存储的时B原来的值,还是存储的C的值?

zhangalex88 发表于 2012-11-6 21:27:54

german010 发表于 2012-11-6 14:43 static/image/common/back.gif
还是有点迷惑,command2的高8位command2相当于一个寄存器A,其低command2相当于另外一寄存器B, ...

建议你去看看D触发器是怎样工作的。
在上升沿的那一刻,其输入端的值被锁存,你说会是什么?
页: [1]
查看完整版本: 如何实现16位寄存器的8位接收,同时低8位移到高8位?