新手:用CPLD 模拟一个74HC595接收信号,然后将接收的信号...
新手:用CPLD 模拟一个74HC595接收信号,然后将接收的信号在输出,,,现在得到的输出一直为0,,,不知道什么原因,,代码如下://////////////////////////////////////////////////////////////////////////////////
module hc595(
CLK,
LD_IN,
SDI,
SDO
);
input CLK,LD_IN,SDI;
output SDO;
reg SDO;
regdata,data_out,y;
always@(posedge LD_IN)//在锁存信号上升沿进行同步
begin
SDO <= data;//根据数据确定第一个时钟的时候输出地数据为1或者0
data <=16'b0; //将接收数据清零
end
always@(posedge CLK)//上升沿触发接收数据
begin
if(SDI)
data<=1'b1; //根据输入的数据移位处理
else data<=1'b0;
data <=(data << 1); //data为接收的数据
//移位发送
data_out <=(data_out << 1); //左移
if(data_out)
SDO <=1; //根据数据确定下个时钟输出1或者0
else
SDO <= 0;
end
endmodule
用MODELSIM仿真的波形如下:
我帮你改了一下,你试试看行不行
module hc595( CLK, LD_IN, SDI, SDO);
input CLK,LD_IN,SDI;
outputSDO;
reg SDO;
regdata;
always@(posedge CLK or posedge LD_IN)
begin
if(LD_IN)
begin
SDO <= data;
data <= 15'b0;
end
else
{SDO,data} <= {data,SDI};
end
endmodule 回楼主,你考虑一下阻塞赋值与非阻塞赋值的区别. 我晚上试试看,,我是第一次搞这个,不熟悉。 JayGong 发表于 2012-8-18 08:40 static/image/common/back.gif
我帮你改了一下,你试试看行不行
朋友你好,你这个程序我测试过输出SDO还是为0 ,不知道是怎么回事,是不是我的方针方式不对?测试波形如下
我测试的波形图是这样的
JayGong 发表于 2012-8-21 23:08 static/image/common/back.gif
我测试的波形图是这样的
我是在MODELSIM测试的,,不知道是不是哪里设置不对。等下再quartus试试,, 这个,也学习下。 楼主的应用我没明白,既然是模拟HC595的功能,怎么会没有并行输出? JayGong 发表于 2012-8-22 11:26 static/image/common/back.gif
楼主的应用我没明白,既然是模拟HC595的功能,怎么会没有并行输出?
是这样的,我这个CPLD和外部单片机通讯。以前是单片机直接驱动外部2片595,595在驱动显示数码管,数码管显示的时间。我现在是要改成把显示时间变成以前的一半,所以先要解码,在显示。由于单片机程序不是我的,我没办法在原来的程序上修改。
本来开始用单片机来做接收解码,但是他那个输出频率有点高,一般的单片机实现不了,所以采用CPLD来做。 最新消息:现在已经仿真正确了,是我的波形增加的时候弄错了,现在波形如下:
d:\111.jpg 最新消息:现在已经仿真正确了,是我的波形增加的时候弄错了,现在波形如下:
页:
[1]