verilog 并行输入转 串行输出
每隔5秒8位并行数据输入变化一次,当变化时串行输出这8位数,让输出的串行数据也相隔5秒那种,串行输出频率当然大于输入数据频率的写个大概给我,分不是问题...
每隔5秒8位并行数据输入变化一次,当变化时串行输出这8位数,让输出的串行数据也相隔5秒那种,串行输出频率当然大于输入数据频率的
写个大概给我,分不是问题 展开
写个大概给我,分不是问题 展开
展开全部
思想如下:时钟频率肯定是外部输入的,具体的输出采样数据的频率控制可以另外加一个时钟使能信号来加以控制,然后在每个时钟上升沿进行判断,输出数据赋值并且输入并行数据进行移位操作,里面有两个计数器来控制时序,一个计数器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
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 广告
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询