用rxd_state[8:0]表示9个端口的接收情况,正在接收为1,否则为0.
if(rxd_state[?] = 0)
send_data[7:0] = ram_outdata[7:0]; //取接接收过来的数据
问题是,if(rxd_state[] = 0 ),一个一个是可以取数据的
但当多了以后,比如 if(rxd_state[8:0] = 9'd0) 时,就不能取数据了,或取的数据不对
补充:端口都是空闲的,
实际程序太大,主程序,贴一段吧
if(Rxdatabuf_state[3] == 1) //如果标志位置高,接收完一条指令
begin
if((rxd_state[8:0] == 9'd0)) //如果9个端口是空闲,不接收就是空闲
begin
ram_comp_data[7:0] = ioDataBuf3[7:0]; //CPU从接收RAM取指令数据
uart_re[8:0] = 9'b111110111; //为1就是端口发送的使能
ram_comp_state[3:0] = 4'd2;
edx_length[4:0] = edx3_length[4:0]; //指令的长度
end
end
else
begin
clr_Rxdatabuf_state[3] = 1;
if(Txdatabuf_state == 0) //如果发送RAM里没有数据
begin
uart_re[8:0] = 9'd0; //使能脚置低
end
end
能看懂呀,这个是经常用到的
恩,少写一个=,能不能具体点
追答把你实际编的程序贴出来吧,阻塞和非阻塞的区别应该了解下
追问贴出一点,if(rxd_state[8:0] == 9'd0) 是不行的,但一个的话就可以,比如:if(rxd_state[2] == 0),都是可以的。费解中……
追答程序用的是非阻塞式的,你的这段代码是应该在alwayes模块下的吧,敏感信号是否是时钟信号呢?还有,你仿真是用什么软件?
如果用if---else嵌套代码估计很长了
所有if语句肯定是在always模块下的,敏感信号肯定是时钟信号,仿真软件是Quartus自带的,下载在板子上结果也是一样的
追答敏感信号是时钟信号那不要用阻塞式的,就是说uart_re[8:0] = 9'd0;应该写成
uart_re[8:0] <= 9'd0;
你是写串口?看不出来程序用意是什么?
其实这样还是不行的。
追答不知道你的用意是什么,这可能也会和其他语句相关的,uart_re总共9位么?可以换其它写法试试看
追问这个和uart_re没有关系,和rxd_state有关系,rxd_state[8:0]是9位,因为9个接收口,把它们一个一个的并起来也是不行的。并2个还是可以,但3个以上就可能有问题。rxd_state = 0 ,说明这个端口空闲可以使用; = 1说明这个口在接收数据。只能9个口都空闲时才能从RAM里取出数据发送。接收的数据先暂放在各自的RAM里。
追答看错了,if(rxd_state[8:0] == 9'd0)) 写成if(!(rxd_state|9'h0))试试
在Verilog中, if语句和case语句有什么区别?
在Verilog中,if语句和case语句是两种不同的条件控制结构。if语句适用于具有单一条件的情况,而case语句适用于具有多个条件的情况。if语句不能直接和case语句组合在一起使用,但是可以在if语句中嵌套使用case语句来实现更复杂的逻辑实现。例如:if (condition1) begin case (select)2'b00: \/\/ 处理逻辑1...
verilog的if语句问题
1.如果是阻塞赋值,如果不写ELSE,那么综合成的就是latch,数值会保持。但是编译不会出错 2.如果是非阻塞赋值,那么不写ELSE,默认数值保持,综合成REG。但是需要根据你的电路功能是否确定数值需要保持
verilog中的if-else-if
verilog中的if-else-if条件语句是用来确定是否执行该块中语句的工具。若if或else部分包含多条语句,需用begin和end括起来。硬件实现方面,if没有else时,表示不满足if内部表达式的任何条件时,值保持不变。每当d或en的值变化时,输出q都会更新。if带有else时,输出q在时钟的上升沿,若rstn为高,则获得...
Verilog语言 if 语句
1)if(表达式)语句。如 if(a>b)out1 = int1;2)if(表达式)语句;else 语句;如 if(a>b)out1 = int1;else out1 = int2;3)if(表达式1)语句1;else if(表达式2) 语句2;else if(表达式3) 语句3;………...else if(表达式m) 语句m;else 语句n;条件语句必须在过程块语...
verilog代码中,关于if…else语句是门级原始结构语句嘛?
门级原始结构语句是指使用逻辑门或原语来实现的语句,例如 and、or、not 等逻辑门的组合。if...else 语句是一种结构化语句,用于实现条件分支,而不是使用逻辑门来实现。在 Verilog 中,if...else 语句通常被用于模块、函数或任务中,用于根据条件执行不同的代码块。例如:```module example(input ...
单\/多if与case条件分支语句
Verilog语言提供了三种条件分支语句:单if语句、多if语句与case语句。单if语句通常被综合为多个二选一的选择器组合,具有隐含的优先级,只能在initial或always语句中使用。单if-else结构则通过二选一的数据选择器搭建。例如,单if语句的优先级从最高到最低依次为d、c、b、a。Vivado综合器能够生成与预期...
不要使用 Verilog 中的 if
《手把手教你设计CPU——RISC-V处理器篇》中提及,Verilog编程应避免使用if语句。EDA工具中的注释功能可以用来创建并行选择逻辑,但这可能会导致前后仿真不一致的问题。case语句也遵循同样的原则。已有实验表明,if和case语句无法传递不定态,但本文将重点验证默认生成的优先级电路。有同学指出,这是system...
关于verilog if语句问题
if 不能这么用,一般的情况下必须写在一个过程赋值模块中。比如:reg b;always@(a)begin if(a==0)b = 1;else b =0;end 或者用一个连续赋值 比如:wire b;assign b = (a)?0:1;这两种方法都可以满足你要的逻辑
verilog的if语句问题
if 不能这么用,一般的情况下必须写在一个过程赋值模块中。比如:reg b;always@(a)begin if(a==0)b = 1;else b =0;end 或者用一个连续赋值 比如:wire b;assign b = (a)?0:1;这两种方法都可以满足你要的逻辑
verilog的if语法
通常我们在判断a的值的时候都是主动去寻找a的某个特定值(if(a=0);),所以个人建议你以后写程序不要主动去判断是不是不定值,系统无法判断, 先判断是不是某个具体的值,在从else中获取不定值 if (a=0){ } else {要执行的代码} ...