verilog串口通信实现pc发送一个字符给fpga,fpga收到以后,发送另外一串字符串给电脑应答。

我写的代码只能实现发送字符与收到字符一样。

你写的代码有问题呗。。。
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity atel2_bin is
port(
txclk: in std_logic; --2400Hz的波特率时钟
reset: in std_logic; --复位信号
din: in std_logic_vector(15 downto 0); --发送的数据
start: in std_logic; --允许传输信号
sout: out std_logic --串行输出端口
);
end atel2_bin;

architecture behav of atel2_bin is
signal thr,len: std_logic_vector(15 downto 0);
signal txcnt_r: std_logic_vector(2 downto 0); --数据位计数
signal sout1: std_logic;
signal cou: integer:=0;
signal oddb:std_logic;
type s is(start1,start2,shift1,shift2,odd1,odd2,stop1,stop2);
signal state:s:=start1;
begin

process(txclk)
begin
if rising_edge(txclk) then
if cou<3 then
thr<=0000000001010101; --发送的文件头
elsif cou=3 then
thr<=0000000000000010; --发送的文件长度
elsif (cou>3 and state=stop2) then
thr<=din;--发送的数据
end if;
end if;
end process;

process(reset,txclk)
variable tsr,tsr1,oddb1,oddb2: std_logic_vector(7 downto 0);
begin
if reset=1 then
txcnt_r<=(others=>0);
sout1<=1;
state<=start1;
cou<=0;
elsif txclkevent and txclk=1 then
case state is
when start1=> ----低8位
if start=1 then
if cou=3 then
len<=thr;
end if;
tsr:=thr(7 downto 0);
oddb1:=thr(7 downto 0);
sout1<=0; --起始位
txcnt_r<=(others=>0);
state<=shift1;
else
state<=start1;
end if;
when shift1=>
oddb<=oddb1(7) xor oddb1(6) xor oddb1(5) xor oddb1(4) xor oddb1(3) xor oddb1(2) xor oddb1(1) xor oddb1(0);
sout1<=tsr(0); --数据位
tsr(6 downto 0):=tsr(7 downto 1);
tsr(7):=0;
txcnt_r<=txcnt_r+1;
if (txcnt_r=7) then
state<=odd1;cou<=cou+1;
end if;
when odd1=> --奇校验位
if oddb=1 then
sout1<=0; state<=stop1;
else
sout1<=1; state<=stop1;
end if;
when stop1=>
sout1<=1; --停止位
if cou<4 then
state<=start1;
else
state<=start2;
end if;

when start2=> ----高8位
tsr1:=thr(15 downto 8);
oddb2:=thr(15 downto 8);
sout1<=0; --起始位
txcnt_r<=(others=>0);
state<=shift2;
when shift2=>
oddb<=oddb2(7) xor oddb2(6) xor oddb2(5) xor oddb2(4) xor oddb2(3) xor oddb2(2) xor oddb2(1) xor oddb2(0);
sout1<=tsr1(0); --数据位
tsr1(6 downto 0):=tsr1(7 downto 1);
tsr1(7):=0;
txcnt_r<=txcnt_r+1;
if (txcnt_r=7) then
state<=odd2;
end if;
when odd2=> --奇校验位
if oddb=1 then
sout1<=0;state<=stop2;
else
sout1<=1;state<=stop2;
end if;
when stop2=>
sout1<=1; --停止位
if len=0000000000000000 then
state<=stop2;
else
state<=start1;
len<=len-1;
end if;
end case;
end if;
end process;

sout<=sout1;

end behav;追问

你这是vhdl 不是我想要的

温馨提示:内容为网友见解,仅供参考
无其他回答

FPGA与电脑串口通信verilog程序
\/\/9600。用一个8倍波特率的时钟将发送或接受每一位bit的周期时间 \/\/划分为8个时隙以使通信同步.\/\/程序的工作过程是:串口处于全双工工作状态,按动key1,FPGA向PC发送“21 EDA"\/\/字符串(串口调试工具设成按ASCII码接受方式);PC可随时向FPGA发送0-F的十六进制 \/\/数据,FPGA接受后显示在7段数码...

verilog 串口通信问题!紧急,救命! 谢谢! 我就是想用CPLD实现串口通信...
程序的基本工作过程是,按动一个按键SW0,控制器向PC的串口发送“welcome",PC机接收后显示验证数据是否正确(串口调试工具设成按ASCII码接受方式).PC可随时向CPLD发送0-F的十六进制数据,CPLD接受后显示在7段数码管上.\/ module serial(clk,rst,rxd,txd,en,seg_data,key_input,lowbit);input clk,rs...

FPGA入门之串口通信(UART)
FPGA入门教程中,串口通信(UART)是一个重要模块。它用于在硬件与计算机之间进行数据传输,主要通过发送和接收数据信号。使用Verilog编程在FPGA中实现UART发送模块,首先需要理解其工作原理,包括波特率生成、位计数、数据发送和同步控制等关键步骤。具体实现中,首先设定一个波特率计数器(MCNT_BAUD)和位计数...

用verilog写了一个FPGA的串口接收程序,怎么用JTAG好用,ASP下载就不好 ...
我不知道你所说的ASP不好使是指什么?是下载不进还是有时能下载进去有时不能?FPGA的JTGA没有什么设置就可以下进去的,但是AS有三个引脚设置的,如果下载不进去,首先看AS那几个引脚电路是否正确,然后就是看设置是否正确。再就是看你是否生成了相应的AS下载文件。

用FPGA串口发送一个4位的数据 怎么做?
要发送多少数据可以由你控制啊,你在verilog代码中编好输出 out 【3:0】 dataout(如果是8位的话是【7:0】); 再在ucf文件中,关联好dataout和fpga的4个io端口,这样就是发送4位了。

关于verilog代码在FPGA上实现的问题
哈哈,自己写好代码就可以了,由软件自动造成网表。布局,布线也是由软件自动规划在FPGA芯片里面的连接问题。(注意是芯片里面的连接)规划好了,下载进芯片的话,芯片里面就是那种规划的结构了 (理解成没有下载程序的芯片是一张白纸)。至于管脚分配就举个例子吧,假如你写了一个2选一的选择器。输入...

[FPGA\/VerilogHDL\/Xilinx]SerDes接口设计
设计案例包括基于IBERT技术的SerDes接口性能验证和基于SerDes的JESD204B、Aurora接口实现。JESD204B接口为ADC和FPGA或ASIC之间的高速标准接口,具有所有高速串行接口的优点。ZU系列的AXI-Lite总线采用100Mhz时钟,注意处理AXI-Lite回复的有效信号和数据时不要进行缓存或延时。Aurora接口是一种轻量级、点对点链路...

如何用Verilog语言使得FPGA输出一个时钟信号
你可以定义 wire out_clk;assign out_clk=clk;还有一个比较重要的问题,你这个模块没有输入时钟,你那个clk<=~clk;是运行不了的,你需要定义一个input的输入时钟,如果仿真时 需要写 :#时间 clk<=~clk;并且在initial 定义clk=0;或者clk=1;的初值。

FPGA纯verilog实现RIFFA的PCIE测速实验,提供工程源码和QT上位机_百度知...
在设计中,我们使用了Xilinx的PCIE IP作为桥接工具,实现了PCIE和电脑主机之间的简单通信。在电脑端运行测试的QT上位机显示了收发速率,工程代码经过编译后在FPGA板上调试验证,确保了实验的可行性。对于希望深入理解PCIE通信的开发者,本文提供了详细的RIFFA理论基础,以及针对不同需求的vivado工程详解。我们...

verilog 三极管生产厂家批发价格讲解数字电位器串
在FPGA中配置SPI接口时,采用串口输入24位指令,提高调试效率。通过微机上的串口调试助手辅助实现,简化了程序修改步骤,加快了调试进程。串口通信是一种通用协议,用于远程设备数据获取。它按照位(b)发送和接收字节,利用3根线完成数据传输,支持异步通信。串口通信的关键参数包括波特率、数据位、停止位和...

相似回答