如何实现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 不行,command2在这个时钟内是上一次的数据。你可以设一个标志位,0的时候就给低8位,1的时候给高8位 thank you 有那么复杂吗?
command2<= {command2,command}; 不就能实现要求了? yayakimwu 发表于 2012-11-2 13:19 static/image/common/back.gif
有那么复杂吗?
command2
这样可以吗 ,
等于是 低8为 给高8位 赋值的同时,又使用command给低8位重新赋值,这样在一个时钟周期内不能完成吧? 大家谁有比较好的办法? german010 发表于 2012-11-5 21:16 static/image/common/back.gif
这样可以吗 ,
等于是 低8为 给高8位 赋值的同时,又使用command给低8位重新赋值,这样在一个时钟周期内 ...
就是相当于8个串行移位并在一起工作。一个时钟周期当然可以完成。 还是有点迷惑,command2的高8位command2相当于一个寄存器A,其低command2相当于另外一寄存器B,另外command 相当于另外一个寄存器C,
在同一个时钟周期内,C赋值给B,B同时赋值给A,A内存储的时B原来的值,还是存储的C的值?
german010 发表于 2012-11-6 14:43 static/image/common/back.gif
还是有点迷惑,command2的高8位command2相当于一个寄存器A,其低command2相当于另外一寄存器B, ...
建议你去看看D触发器是怎样工作的。
在上升沿的那一刻,其输入端的值被锁存,你说会是什么?
页:
[1]