verilog如何实现串行接收8位数据转换为16位,下面这样是否....
verilog如何实现串行接收8位数据转换为16位, 总是逃脱不了在一个时钟周期啊?reg data;
always @(posedge clk or posedge uart_data_com)
if(Quart_data_com)
begin
data<=data<<4'd8;
data <=uart_data_com
end
这样不行吧,如何实现新接收的数据在data的最低8位,然后 原来的数据顺序左移?
data <= {data,uart_data_com}; DepravedLucien 发表于 2012-11-7 14:21 static/image/common/back.gif
data
一个时钟周期内可以正确完成此操作吗 ? german010 发表于 2012-11-7 16:10 static/image/common/back.gif
一个时钟周期内可以正确完成此操作吗 ?
你的程序寫錯了{:huffy:} sky5566 发表于 2012-11-7 17:35 static/image/common/back.gif
你的程序寫錯了
左移啊!错了么?
哪里啊? german010 发表于 2012-11-7 16:10 static/image/common/back.gif
一个时钟周期内可以正确完成此操作吗 ?
可以啊 ,不是你想的那样顺序操作的 如果你是这样想的话呵呵 sky5566 发表于 2012-11-7 17:35 static/image/common/back.gif
你的程序寫錯了
看错了我以为你在回复我呢 你这个事非阻塞的吧,弄个阻塞的试试 做一个二分频,然后拼位宽 module bit8tobit16
(
input clk ,
input rst_n,
input dat_in ,
output reg dat_out,
output vld_out
);
reg div2_reg;
reg dat_reg ;
always @(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
div2_reg <= 1'd0;
else
div2_reg <= ~div2_reg;
end
always @(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
dat_reg <= 8'd0;
else
dat_reg <= dat_in;
end
always @(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
dat_out <= 16'd0;
else
dat_out <= {dat_reg,dat_in};
end
assign vld_out = div_2reg;
endmodule 按着fxyzhqr坛友的建议,
我用 阻塞了,效果还好,然后直接解析 加个fifo不行么 理论应该可以,可能我哪里没弄好,
现在省事了,直接去了fifo,直接解析更简单
页:
[1]