verilog 将两个数据合并为一个

module hh(clr,clk,clk1,din,fifo,out);
input clr,clk,clk1,din;

output [7:0]fifo;
output [7:0]out;
reg [7:0]out;
reg [7:0] fifo;
input [3:0] din;

always @(posedge clk) begin
if(!clr)
fifo<=0;
else
fifo<={fifo[3:0],din};///////
end

always @(posedge clk1) begin
out <= fifo;
end

endmodule

将两个4位的数据合成一个8位的数据,不知道这样行不行?这样输出的数据是不是低四位是第二个din,高四位是第一个din?

如果'////'处改成这样呢?fifo<={din,fifo[7:4]};

感谢各位了!!!

fifo<={fifo[3:0],din}; 这个你写的没问题,低四位是din,高四位是fifo[3:0]。
但两个clk的频率问题,导致输出数据会不会按照你想的(注意采样哈),还有,fifo是output,为什么不在输出之前先锁存下,保证数据正确,而是直接把输出的寄存器按位截取?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-12
fifo<={fifo[3:0],din};
这个你写的没问题,低四位是din,高四位是fifo[3:0]。
但两个clk的频率问题,导致输出数据会不会按照你想的(注意采样哈),还有,fifo是output,为什么不在输出之前先锁存下,保证数据正确,而是直接把输出的寄存器按位截取?
第2个回答  2009-08-27
从左到右,依次为高位-->低位;din 1位的?恐怕不行吧?至少左右位数要匹配,还有你这个代码写的有点纠结了,看一下Quartus2自带的fifo写法吧。
相似回答