每当 dis_data有变化就产生一个 高脉冲该怎么写啊
时间:10-02
整理:3721RD
点击:
每当 dis_data有变化就产生一个 高脉冲该怎么写啊
我知道我这个写的是不对的,只是做个示范
always @(dis_data)
begin
start <= 1'b0;
start <= 1'b1;
start <= 1'b0;
end
assign start = (dis data1 != dis_data)?1'b1:1'b0;这个也是不行的,因为脉冲宽度不可控。
我是采集输入信号的变化,最好用组合逻辑实现
如果用时序逻辑实现就会产生一个始终周期的误差。
我知道我这个写的是不对的,只是做个示范
always @(dis_data)
begin
start <= 1'b0;
start <= 1'b1;
start <= 1'b0;
end
assign start = (dis data1 != dis_data)?1'b1:1'b0;这个也是不行的,因为脉冲宽度不可控。
我是采集输入信号的变化,最好用组合逻辑实现
如果用时序逻辑实现就会产生一个始终周期的误差。
对dis_data进行边缘检测(上升或下降沿),检测到的话,拉高start,一个时钟后再拉低就行。这个用组合逻辑实现,我是不会
reg [7:0]count=0;
assign start = (count !=1'b0)?1'b1:1'b0;
always @(posage clk)
begin
if(count==8'd10)count<=1'b0;
else if(dis_data||(count!=0)) count<=count+1'b1;
else count<=count;
end
count的大小就是脉冲宽度。count=1时,就是一个时钟的脉冲宽度。
always @(posedge clk)
begin
dis_data_dly <= dis_data;
end
assign pos_dis = (dis_data_dly == 0)&&(dis_data == 1)
这个是采上升沿的 你参考下,clk要和dis_data是同源的
采双沿 assign = (dis_data_dly != dis_data )