-
求助FPGA状态机的条件always0和!always0是什么?(quartus II生成)
[i=s] 本帖最后由 泼墨染笛香 于 2025-1-8 20:58 编辑 [/i] [align=left][font=宋体][color=#000][font=宋体][size=12pt]问题[/size][/font][/color][/font][font=Times New Roman][color=#000][size=12pt]1[/size][/color][/font][font=宋体][color=#000][font=宋体][size=12pt]:生成的状态机表格中[/size][/font][/color][/font][font=Times New Roman][color=#000][size=12pt]always0[/size][/color][/font][font=宋体][color=#000][font=宋体][size=12pt]和[/size][/font][/color][/font][font=Times New Roman][color=#000][size=12pt]!always0[/size][/color][/font][font=宋体][color=#000][font=宋体][size=12pt]是什么条件[/size][/font][/color][/font][font=Times New Roman][color=#000][size=12pt]?[/size][/color][/font][/align][align=left][align=left][font=宋体] 前几个源状态的跳转条件都是两个输入变量[/font]pi_money_half[font=宋体]和[/font][font=Times New Roman]pi_money_one[/font][font=宋体]的组合。[/font][/align][align=left][font=宋体] 那么源状态[/font]TWO[font=宋体]跳转的条件[/font][font=Times New Roman]always0[/font][font=宋体]和[/font][font=Times New Roman]!always0[/font][font=宋体]也应该是它俩的组合吧?分别对应什么?[/font][/align][/align][align=left][attach]2351084[/attach][/align][align=left][font=宋体]问题[/font]2:[font=宋体]为什么下面两组代码生成的结果不一样?[/font][color=#191b1f][size=15px][font=宋体]其中[/font][/size][/color][color=#191b1f][font=-apple-system, BlinkMacSystemFont, "][size=15px]pi_money = {pi_money_one, pi_money_half};[/size][/font][/color][/align][align=left][attach]2351086[/attach][/align] [align=left][attach]2351088[/attach][/align] [align=left]代码见下方(quartus II中编译后查看"Analysis & Synthesis"-"Netlist Viewers"-"State Machine Viewer")[/align] `timescale 1ns/1ns module complex_fsm ( input wire sys_clk , //系统时钟50MHz input wire sys_rst_n , //全局复位 input wire pi_money_one , //投币1元 input wire pi_money_half //投币0.5元 ); //只有五种状态,使用独热码 parameter IDLE = 5'b00001; parameter HALF = 5'b00010; parameter ONE = 5'b00100; parameter ONE_HALF = 5'b01000; parameter TWO = 5'b10000; reg [4:0] state; wire [1:0] pi_money; assign pi_money = {pi_money_one, pi_money_half}; always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1'b0) state <= IDLE; //任何情况下只要按复位就回到初始状态 else case(state) IDLE :if(pi_money == 2'b01) state <= HALF; else if(pi_money == 2'b10) state <= ONE; else state <= IDLE; HALF :if(pi_money == 2'b01) state <= ONE; else if(pi_money == 2'b10) state <= ONE_HALF; else state <= HALF; ONE :if(pi_money == 2'b01) state <= ONE_HALF; else if(pi_money == 2'b10) state <= TWO; else state <= ONE; ONE_HALF:if(pi_money == 2'b01) state <= TWO; else if(pi_money == 2'b10) state <= IDLE; else state <= ONE_HALF; //情况1 合理 // TWO :if((pi_money == 2'b01)) // state <= IDLE; //01 // else // state <= TWO; //x0 11 //情况2 合理 // TWO :if((pi_money == 2'b10)) // state <= IDLE; //10 // else // state <= TWO; //x0 11 //情况3.1 不懂 TWO :if((pi_money == 2'b01) || (pi_money == 2'b10)) state <= IDLE; //always0。不该是10 01? else state <= TWO; //!always0。不该是00 11? //情况3.2。3.2和3.1不等价?生成状态机表格与3.1不同。不懂。 // TWO :if((pi_money == 2'b01) || (pi_money == 2'b10)) // state <= IDLE; //01 10 // else if((pi_money == 2'b00) || (pi_money == 2'b11)) // state <= TWO; //00 11 default : state <= IDLE;//跳转到编码的状态之外也回到初始状态 endcase endmodule
853浏览量 1回复量 关注量 -
FPGA关于verilog语言小数的计算问题?
[color=#121212][backcolor=rgb(255, 255, 255)][font=-apple-system, BlinkMacSystemFont, "][size=15px]verilog语言中怎么定义0.1小数,进行运算。比如实现7*0.1,得到0.7结果。实现这个过程,有具体程序能参考的嘛,感谢感谢!![/size][/font][/backcolor][/color]
1320浏览量 1回复量 关注量 -
verilog if语句不执行问题
各位大侠,我由以下代码是一段usb发送代码 其中有一部分这样 2:begin if(sendCnt >= 8'd8)begin ft_wr_n<= 1; sendState<=0; led2 <= !led2; end else begin ft_wr_n<= 0; ft_data_out <=sendCnt; sendCnt <= sendCnt + 1; end 在这个if里面判断sendCnt 》= 8的时候停止传输,sendCnt 是从0开始加的,led2 用来判断这个if语句是否执行,请问,这个if语句怎么都不执行啊,感谢
4854浏览量 1回复量 关注量 -
Failure to obtain a Verilog simulation license是怎么回事?
用quartus仿真 出现Failure to obtain a Verilog simulation license的问题用modelism仿真 也出现Failure to obtain aVerilog simulation license的问题 痛苦
4571浏览量 3回复量 关注量