verilog 并行输入转 串行输出

每隔5秒8位并行数据输入变化一次,当变化时串行输出这8位数,让输出的串行数据也相隔5秒那种,串行输出频率当然大于输入数据频率的写个大概给我,分不是问题... 每隔5秒8位并行数据输入变化一次,当变化时串行输出这8位数,让输出的串行数据也相隔5秒那种,串行输出频率当然大于输入数据频率的

写个大概给我,分不是问题
展开
 我来答
2403102028
推荐于2016-04-29 · TA获得超过340个赞
知道答主
回答量:37
采纳率:0%
帮助的人:67.7万
展开全部
思想如下:时钟频率肯定是外部输入的,具体的输出采样数据的频率控制可以另外加一个时钟使能信号来加以控制,然后在每个时钟上升沿进行判断,输出数据赋值并且输入并行数据进行移位操作,里面有两个计数器来控制时序,一个计数器cnt2由另外一个cnt1触发,下面的是从低到高的输出,如果你想从高到底的输出,可以将data[7]输出,然后将移位反向,思想是这样的,没经过仿真,只是想着写的
module shift(rst_n,clk,data_in,data_out);
input rst_n;
input clk;
input [7:0]data_in;
output data_out;
//下面clk_en为控制输出数据以及并行数据移位的频率控制,比如外部时钟为25us,那么你说的
//5s就是200个cycle,要传送8bit数据,就是25个时钟传送一位,输入数据的频率得由外面保证
reg [4:0]cnt1;
reg [3:0cnt2;
reg [7:0]data;
//计数器cnt1的作用是产生25个时钟一变的时钟使能,控制内部变化频率
always @(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
cnt1 <=0;
else if(cnt=24)
cnt1 <=0;
else
cnt 1<=cnt1+1;
end
always @(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
cnt2 <=0;
else if(cnt2=4'b1000)
cnt2 <=0;
else if(cnt1=24)
cnt 2<=cnt2+1;
end
always @(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
data <= 8'b0;
else if(cnt2==4'b0)
data <= data_in;
else if(cnt1==24)
data <={1'b0,data[7:1]};
end
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
data_out <= 1'b0;
else if(cnt1=0)
data_out <= data[0];
end
always @(posedge clk or negedge rst_n)
begin
f(rst_n == 1'b0)
data <= 1'b0;
else if(cnt1=0)
data_out <= data[0];
end
endmodule
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
风雷小草
2011-09-10 · TA获得超过1711个赞
知道小有建树答主
回答量:1174
采纳率:0%
帮助的人:667万
展开全部
将输入的并行数据暂存在内部寄存器里,然后一位位地输出,输出8位后,再将外部数据拿进来更新,再输出。这样循环进行。
追问
大概的我也知道,因为学的不是这个方向,没学过verilog,也就处于看的懂简单程序的地步,需要给些一段
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式